While i assume this to be fine currently, i quite frankly dont trust the srb2 codebase enough aswell as preventing any future issues if there should ever be need to switch locales, since toupper WILL change behaviour in such cases which does not qualify as pure
35 lines
891 B
C
35 lines
891 B
C
#ifndef __FASTCMP_H__
|
|
#define __FASTCMP_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// returns false if s != c
|
|
// returns true if s == c
|
|
FUNCINLINE static ATTRINLINE boolean fasticmp(const char *s, const char *c)
|
|
{
|
|
for (; *s && toupper(*s) == toupper(*c); s++, c++) ;
|
|
return (*s == *c); // make sure both strings ended
|
|
}
|
|
|
|
// case-sensitive of the above
|
|
FUNCINLINE static ATTRINLINE PUREFUNC boolean fastcmp(const char *s, const char *c)
|
|
{
|
|
for (; *s && *s == *c; s++, c++) ;
|
|
return (*s == *c); // make sure both strings ended
|
|
}
|
|
|
|
// length-limited of the above
|
|
// only true if both strings are at least l characters long AND match, case-sensitively!
|
|
FUNCINLINE static ATTRINLINE PUREFUNC boolean fastncmp(const char *s, const char *c, UINT16 l)
|
|
{
|
|
for (; *s && *s == *c && --l; s++, c++) ;
|
|
return !l; // make sure you reached the end
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|