Usermode/libc - Fix strchr and strrchr behavior master
authorJohn Hodge <[email protected]>
Wed, 18 Feb 2015 07:55:26 +0000 (15:55 +0800)
committerJohn Hodge <[email protected]>
Wed, 18 Feb 2015 07:55:26 +0000 (15:55 +0800)
Usermode/Libraries/libc.so_src/string.c

index d61d51d..09481d8 100644 (file)
@@ -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
 /**
  * \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;
  */
 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;
        {
                if( *str == character )
                        return (char*)str;
-       }
+       } while( *str++ );
        return NULL;
 }
 
        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;
 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];
        {
                if(str[i] == character)
                        return (void*)&str[i];
-       }
+       } while( i -- );
        return NULL;
 }
 
        return NULL;
 }
 

UCC git Repository :: git.ucc.asn.au