From 230612b2efeeb769f1d96193ec01b10bd36d9873 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Wed, 18 Feb 2015 15:55:26 +0800 Subject: [PATCH] Usermode/libc - Fix strchr and strrchr behavior --- Usermode/Libraries/libc.so_src/string.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Usermode/Libraries/libc.so_src/string.c b/Usermode/Libraries/libc.so_src/string.c index d61d51dd..09481d86 100644 --- a/Usermode/Libraries/libc.so_src/string.c +++ b/Usermode/Libraries/libc.so_src/string.c @@ -184,15 +184,16 @@ EXPORT char *strndup(const char *str, size_t maxlen) /** * \fn EXPORT char *strchr(char *str, int character) * \brief Locate a character in a string + * \note The terminating NUL is part of the string */ EXPORT char *strchr(const char *_str, int character) { const unsigned char* str = (const unsigned char*)_str; - for(;*str;str++) + do { if( *str == character ) return (char*)str; - } + } while( *str++ ); return NULL; } @@ -203,11 +204,12 @@ EXPORT char *strchr(const char *_str, int character) EXPORT char *strrchr(const char *_str, int character) { const unsigned char* str = (const unsigned char*)_str; - for( size_t i = strlen(_str); i--; ) + size_t i = strlen(_str); + do { if(str[i] == character) return (void*)&str[i]; - } + } while( i -- ); return NULL; } -- 2.20.1