26#ifndef _WDL_CSTRING_H_
27#define _WDL_CSTRING_H_
35#ifdef _WDL_CSTRING_IMPL_ONLY_
36 #ifdef _WDL_CSTRING_IF_ONLY_
37 #undef _WDL_CSTRING_IF_ONLY_
39 #define _WDL_CSTRING_PREFIX
41 #define _WDL_CSTRING_PREFIX static WDL_STATICFUNC_UNUSED
46#if defined(_WIN32) && defined(_MSC_VER)
52 #define snprintf WDL_snprintf
57 #define vsnprintf WDL_vsnprintf
66 #define lstrcpyn lstrcpyn_safe
73#ifdef _WDL_CSTRING_IF_ONLY_
91 #if defined(_WIN32) && defined(_MSC_VER)
92 void WDL_vsnprintf(
char *o,
size_t count,
const char *
format, va_list args);
96 int WDL_strcmp_logical(
const char *s1,
const char *s2,
int case_sensitive);
97 const char *WDL_stristr(
const char*
a,
const char*
b);
101 #if defined(_WIN32) && defined(_MSC_VER)
142 while (*o) {
if (--
count < 1)
return; o++; }
157 const char *
p=str, *ep;
162 if (*
p ==
'.')
return p;
220 while (
p > str && (
p[-1] ==
'\r' ||
p[-1] ==
'\n'))
p--;
229 while (
p > str && (
p[-1] ==
'\r' ||
p[-1] ==
'\n' ||
p[-1] ==
' '||
p[-1] ==
'\t'))
p--;
247 if (!str[0] || ((str[0] ==
'.' || str[0] ==
',') && !str[1]))
259 while (*
p ==
' ' || *
p ==
'\t' || *
p ==
'[')
p++;
268 while (*o) {
if (--
count < 1)
return; o++; }
279 while (*o) {
if (--
count < 1)
return; o++; }
284 _WDL_CSTRING_PREFIX int WDL_strcmp_logical(
const char *s1,
const char *s2,
int case_sensitive)
290 if (*s1 >=
'0' && *s1 <=
'9' && *s2 >=
'0' && *s2 <=
'9')
292 int lzdiff=0, len1=0, len2=0;
294 while (*s1 ==
'0') { s1++; lzdiff--; }
295 while (*s2 ==
'0') { s2++; lzdiff++; }
297 while (s1[len1] >=
'0' && s1[len1] <=
'9') len1++;
298 while (s2[len2] >=
'0' && s2[len2] <=
'9') len2++;
300 if (len1 != len2)
return len1-len2;
304 const int d = *s1++ - *s2++;
308 if (lzdiff)
return lzdiff;
312 char c1 = *s1++,
c2 = *s2++;
315 if (case_sensitive)
return c1-
c2;
317 if (c1>=
'a' && c1<=
'z') c1+=
'A'-
'a';
318 if (
c2>=
'a' &&
c2<=
'z')
c2+=
'A'-
'a';
319 if (c1 !=
c2)
return c1-
c2;
321 else if (!c1)
return 0;
327 const size_t blen = strlen(
b);
344#undef _WDL_CSTRING_PREFIX
uint8_t a
Definition Spc_Cpu.h:141
unsigned d
Definition inflate.c:940
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
float in
Definition lilv_test.c:1460
intptr_t INT_PTR
Definition swell-types.h:42
#define strnicmp(x, y, z)
Definition swell-types.h:71
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
#define _WDL_CSTRING_PREFIX
Definition wdlcstring.h:41
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263
_WDL_CSTRING_PREFIX const char * WDL_get_filepart(const char *str)
Definition wdlcstring.h:148
_WDL_CSTRING_PREFIX char * WDL_remove_fileext(char *str)
Definition wdlcstring.h:168
_WDL_CSTRING_PREFIX const char * WDL_get_fileext(const char *str)
Definition wdlcstring.h:155
_WDL_CSTRING_PREFIX char * WDL_remove_trailing_decimal_zeros(char *str, unsigned int keep)
Definition wdlcstring.h:234
_WDL_CSTRING_PREFIX void lstrcpyn_safe(char *o, const char *in, INT_PTR count)
Definition wdlcstring.h:129
_WDL_CSTRING_PREFIX size_t WDL_remove_trailing_crlf(char *str)
Definition wdlcstring.h:216
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
_WDL_CSTRING_PREFIX void lstrcatn(char *o, const char *in, INT_PTR count)
Definition wdlcstring.h:138
_WDL_CSTRING_PREFIX const char * WDL_sanitize_ini_key_start(const char *p)
Definition wdlcstring.h:257
_WDL_CSTRING_PREFIX size_t WDL_remove_trailing_whitespace(char *str)
Definition wdlcstring.h:225
_WDL_CSTRING_PREFIX int WDL_remove_trailing_dirchars(char *str)
Definition wdlcstring.h:202
_WDL_CSTRING_PREFIX char WDL_remove_filepart(char *str)
Definition wdlcstring.h:184
#define WDL_VARARG_WARN(x, n, s)
Definition wdltypes.h:86
#define WDL_IS_DIRCHAR(x)
Definition wdltypes.h:129
#define const
Definition zconf.h:137