[libc] Add strncasecmp()

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2021-05-18 11:45:24 +01:00
parent 059c4dc688
commit 661093054b
3 changed files with 26 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
/** @file
@@ -205,11 +206,24 @@ int strncmp ( const char *first, const char *second, size_t max ) {
* @ret diff Difference
*/
int strcasecmp ( const char *first, const char *second ) {
return strncasecmp ( first, second, ~( ( size_t ) 0 ) );
}
/**
* Compare case-insensitive strings
*
* @v first First string
* @v second Second string
* @v max Maximum length to compare
* @ret diff Difference
*/
int strncasecmp ( const char *first, const char *second, size_t max ) {
const uint8_t *first_bytes = ( ( const uint8_t * ) first );
const uint8_t *second_bytes = ( ( const uint8_t * ) second );
int diff;
for ( ; ; first_bytes++, second_bytes++ ) {
for ( ; max-- ; first_bytes++, second_bytes++ ) {
diff = ( toupper ( *first_bytes ) -
toupper ( *second_bytes ) );
if ( diff )
@@ -217,6 +231,7 @@ int strcasecmp ( const char *first, const char *second ) {
if ( ! *first_bytes )
return 0;
}
return 0;
}
/**