newlib-cygwin/winsup/cygwin/string.h

93 lines
1.8 KiB
C

/* string.h: Extra string defs
This file is part of Cygwin.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#ifndef _CYGWIN_STRING_H
#define _CYGWIN_STRING_H
#include_next <string.h>
#ifdef __cplusplus
extern "C" {
#endif
#undef strchrnul
#define strchrnul cygwin_strchrnul
static inline __stdcall char *
strchrnul (const char *s, int c)
{
while (*s != (char) c && *s != 0)
++s;
return (char *) s;
}
#ifdef __INSIDE_CYGWIN__
extern const char isalpha_array[];
static inline int
ascii_strcasematch (const char *cs, const char *ct)
{
const unsigned char *us, *ut;
us = (const unsigned char *) cs;
ut = (const unsigned char *) ct;
while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
{
if (us[0] == 0)
return 1;
++us, ++ut;
}
return 0;
}
static inline int
ascii_strncasematch (const char *cs, const char *ct, size_t n)
{
const unsigned char *us, *ut;
if (!n)
return 1;
us = (const unsigned char *) cs;
ut = (const unsigned char *) ct;
while (us[0] == ut[0] || (us[0] ^ isalpha_array[us[0]]) == ut[0])
{
--n;
if (!n || us[0] == 0)
return 1;
++us, ++ut;
}
return 0;
}
#undef strcasecmp
#define strcasecmp cygwin_strcasecmp
int __stdcall cygwin_strcasecmp (const char *, const char *);
#undef strncasecmp
#define strncasecmp cygwin_strncasecmp
int __stdcall cygwin_strncasecmp (const char *, const char *, size_t);
#define strcasematch(s1,s2) (!cygwin_strcasecmp ((s1),(s2)))
#define strncasematch(s1,s2,n) (!cygwin_strncasecmp ((s1),(s2),(n)))
char *strlwr (char *);
char *strupr (char *);
#endif /* __INSIDE_CYGWIN__ */
char *__stdcall strccpy (char *__restrict s1, const char **__restrict s2,
char c);
#ifdef __cplusplus
}
#endif
#endif /* _CYGWIN_STRING_H */