libc+libluna: Add case-insensitive string comparison functions
This commit is contained in:
parent
c17e1a5802
commit
9ef09cfc88
@ -1,4 +1,4 @@
|
||||
/* string.h: String manipulation. */
|
||||
/* string.h: String and memory manipulation. */
|
||||
|
||||
#ifndef _STRING_H
|
||||
#define _STRING_H
|
||||
@ -89,6 +89,12 @@ extern "C"
|
||||
/* Locate a string (needle) in another one (haystack). */
|
||||
char* strstr(const char* haystack, const char* needle);
|
||||
|
||||
/* Compare two null-terminated strings, ignoring case. */
|
||||
int strcasecmp(const char* a, const char* b);
|
||||
|
||||
/* Compare two fixed-size null-terminated strings, ignoring case. */
|
||||
int strncasecmp(const char* a, const char* b, size_t max);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
23
libc/include/strings.h
Normal file
23
libc/include/strings.h
Normal file
@ -0,0 +1,23 @@
|
||||
/* strings.h: String operations. */
|
||||
|
||||
#ifndef _STRINGS_H
|
||||
#define _STRINGS_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* Compare two null-terminated strings, ignoring case. */
|
||||
int strcasecmp(const char* a, const char* b);
|
||||
|
||||
/* Compare two fixed-size null-terminated strings, ignoring case. */
|
||||
int strncasecmp(const char* a, const char* b, size_t max);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -7,7 +7,7 @@ extern "C"
|
||||
void* memset(void* buf, int c, usize n);
|
||||
int memcmp(const void* a, const void* b, usize n);
|
||||
void* memmove(void* dest, const void* src, usize n);
|
||||
void* memchr(const void* buf, int c, size_t n);
|
||||
void* memchr(const void* buf, int c, usize n);
|
||||
|
||||
usize strlen(const char* str);
|
||||
usize strnlen(const char* str, usize max);
|
||||
@ -41,4 +41,7 @@ extern "C"
|
||||
char* strpbrk(const char* s, const char* accept);
|
||||
|
||||
char* strstr(const char* haystack, const char* needle);
|
||||
|
||||
int strcasecmp(const char* a, const char* b);
|
||||
int strncasecmp(const char* a, const char* b, usize max);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <luna/Alloc.h>
|
||||
#include <luna/CString.h>
|
||||
#include <luna/CType.h>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
@ -297,4 +298,25 @@ extern "C"
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int strcasecmp(const char* a, const char* b)
|
||||
{
|
||||
while (*a && (_tolower(*a) == _tolower(*b)))
|
||||
{
|
||||
a++;
|
||||
b++;
|
||||
}
|
||||
return _tolower(*(const u8*)a) - _tolower(*(const u8*)b);
|
||||
}
|
||||
|
||||
int strncasecmp(const char* a, const char* b, usize max)
|
||||
{
|
||||
const char* s = a;
|
||||
while (*a && (_tolower(*a) == _tolower(*b)) && (usize)(a - s) < (max - 1))
|
||||
{
|
||||
a++;
|
||||
b++;
|
||||
}
|
||||
return _tolower(*(const u8*)a) - _tolower(*(const u8*)b);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user