#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <strings.h>
#include <ctype.h>
/** @file
* @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 )
if ( ! *first_bytes )
return 0;
}
+ return 0;
}
/**
}
int __pure strcasecmp ( const char *first, const char *second ) __nonnull;
+int __pure strncasecmp ( const char *first, const char *second,
+ size_t max ) __nonnull;
#endif /* _STRINGS_H */
ok ( strcasecmp ( "Uncle", "Uncle Jack" ) != 0 );
ok ( strcasecmp ( "not", "equal" ) != 0 );
+ /* Test strncasecmp() */
+ ok ( strncasecmp ( "", "", 0 ) == 0 );
+ ok ( strncasecmp ( "", "", 73 ) == 0 );
+ ok ( strncasecmp ( "Uncle Jack", "Uncle jack", 47 ) == 0 );
+ ok ( strncasecmp ( "Uncle Jack", "Uncle jake", 47 ) != 0 );
+ ok ( strncasecmp ( "Uncle Jack", "Uncle jake", 9 ) != 0 );
+ ok ( strncasecmp ( "Uncle Jack", "Uncle jake", 8 ) == 0 );
+
/* Test memcmp() */
ok ( memcmp ( "", "", 0 ) == 0 );
ok ( memcmp ( "Foo", "Foo", 3 ) == 0 );