From: Aaron Young Date: Wed, 9 Jan 2019 19:35:39 +0000 (-0800) Subject: [libc] Fix strcmp()/strncmp() to return proper values X-Git-Tag: v1.20.1~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3946aa9;p=thirdparty%2Fipxe.git [libc] Fix strcmp()/strncmp() to return proper values Fix strcmp() and strncmp() to return proper standard positive/negative values for unequal strings. Current implementation is backwards (i.e. the functions are returning negative when should be positive and vice-versa). Currently all consumers of these functions only check the return value for ==0 or !=0 and so we can safely change the implementation without breaking things. Signed-off-by: Aaron Young Modified-by: Michael Brown Signed-off-by: Michael Brown --- diff --git a/src/core/string.c b/src/core/string.c index 5a185e635..5bd9dae8b 100644 --- a/src/core/string.c +++ b/src/core/string.c @@ -173,7 +173,7 @@ int strncmp ( const char *first, const char *second, size_t max ) { int diff; for ( ; max-- ; first_bytes++, second_bytes++ ) { - diff = ( *second_bytes - *first_bytes ); + diff = ( *first_bytes - *second_bytes ); if ( diff ) return diff; if ( ! *first_bytes ) @@ -195,8 +195,8 @@ int strcasecmp ( const char *first, const char *second ) { int diff; for ( ; ; first_bytes++, second_bytes++ ) { - diff = ( toupper ( *second_bytes ) - - toupper ( *first_bytes ) ); + diff = ( toupper ( *first_bytes ) - + toupper ( *second_bytes ) ); if ( diff ) return diff; if ( ! *first_bytes ) diff --git a/src/tests/string_test.c b/src/tests/string_test.c index 4693b5f65..a66501da3 100644 --- a/src/tests/string_test.c +++ b/src/tests/string_test.c @@ -88,6 +88,7 @@ static void string_test_exec ( void ) { ok ( strcmp ( "Hello", "hello" ) != 0 ); ok ( strcmp ( "Hello", "Hello world!" ) != 0 ); ok ( strcmp ( "Hello world!", "Hello" ) != 0 ); + ok ( strcmp ( "abc", "def" ) < 0 ); /* Test strncmp() */ ok ( strncmp ( "", "", 0 ) == 0 );