mirror of https://github.com/ipxe/ipxe.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 <Aaron.Young@oracle.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/88/head
parent
e226fecd1b
commit
3946aa9bac
|
@ -173,7 +173,7 @@ int strncmp ( const char *first, const char *second, size_t max ) {
|
||||||
int diff;
|
int diff;
|
||||||
|
|
||||||
for ( ; max-- ; first_bytes++, second_bytes++ ) {
|
for ( ; max-- ; first_bytes++, second_bytes++ ) {
|
||||||
diff = ( *second_bytes - *first_bytes );
|
diff = ( *first_bytes - *second_bytes );
|
||||||
if ( diff )
|
if ( diff )
|
||||||
return diff;
|
return diff;
|
||||||
if ( ! *first_bytes )
|
if ( ! *first_bytes )
|
||||||
|
@ -195,8 +195,8 @@ int strcasecmp ( const char *first, const char *second ) {
|
||||||
int diff;
|
int diff;
|
||||||
|
|
||||||
for ( ; ; first_bytes++, second_bytes++ ) {
|
for ( ; ; first_bytes++, second_bytes++ ) {
|
||||||
diff = ( toupper ( *second_bytes ) -
|
diff = ( toupper ( *first_bytes ) -
|
||||||
toupper ( *first_bytes ) );
|
toupper ( *second_bytes ) );
|
||||||
if ( diff )
|
if ( diff )
|
||||||
return diff;
|
return diff;
|
||||||
if ( ! *first_bytes )
|
if ( ! *first_bytes )
|
||||||
|
|
|
@ -88,6 +88,7 @@ static void string_test_exec ( void ) {
|
||||||
ok ( strcmp ( "Hello", "hello" ) != 0 );
|
ok ( strcmp ( "Hello", "hello" ) != 0 );
|
||||||
ok ( strcmp ( "Hello", "Hello world!" ) != 0 );
|
ok ( strcmp ( "Hello", "Hello world!" ) != 0 );
|
||||||
ok ( strcmp ( "Hello world!", "Hello" ) != 0 );
|
ok ( strcmp ( "Hello world!", "Hello" ) != 0 );
|
||||||
|
ok ( strcmp ( "abc", "def" ) < 0 );
|
||||||
|
|
||||||
/* Test strncmp() */
|
/* Test strncmp() */
|
||||||
ok ( strncmp ( "", "", 0 ) == 0 );
|
ok ( strncmp ( "", "", 0 ) == 0 );
|
||||||
|
|
Loading…
Reference in New Issue