Compare commits

...

3 Commits

Author SHA1 Message Date
759fb4fe0e
tools: Make replace-stdint.sh replace types only if they're followed by a space
All checks were successful
continuous-integration/drone/push Build is passing
Otherwise, size_to_read -> usizeo_read.
2023-07-22 11:59:41 +02:00
098109f16b
tools: Make sure formatting scripts cover all sources 2023-07-22 11:59:02 +02:00
9ef09cfc88
libc+libluna: Add case-insensitive string comparison functions 2023-07-22 11:58:28 +02:00
6 changed files with 67 additions and 13 deletions

View File

@ -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
View 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

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -4,7 +4,7 @@ source $(dirname $0)/env.sh
cd $LUNA_ROOT
FOLDERS=(kernel libc libos libluna apps)
FOLDERS=(kernel libc libos libluna apps shell tests)
SOURCES=($(find ${FOLDERS[@]} -type f -name "*.cpp"))
SOURCES+=($(find ${FOLDERS[@]} -type f -name "*.h"))