X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fu_string.h;h=88df2cceda66681d02e6b8c2f9752bce7f845080;hb=c977567db65e3430d1b7323f698d17bea58624e9;hp=e4081466459cb5f7902bf7f60c4e76a36279d368;hpb=2930b76cfe1e13e84ac0d88f9c6d709a5a8d4c18;p=mesa.git diff --git a/src/util/u_string.h b/src/util/u_string.h index e4081466459..88df2cceda6 100644 --- a/src/util/u_string.h +++ b/src/util/u_string.h @@ -50,12 +50,9 @@ extern "C" { #endif -#ifdef _GNU_SOURCE - -#define util_strchrnul strchrnul - -#else +#if !defined(_GNU_SOURCE) || defined(__APPLE__) +#define strchrnul util_strchrnul static inline char * util_strchrnul(const char *s, char c) { @@ -68,51 +65,18 @@ util_strchrnul(const char *s, char c) #ifdef _WIN32 -static inline int -util_vsnprintf(char *str, size_t size, const char *format, va_list ap) -{ - /* We need to use _vscprintf to calculate the length as vsnprintf returns -1 - * if the number of characters to write is greater than count. - */ - va_list ap_copy; - int ret; - va_copy(ap_copy, ap); - ret = _vsnprintf(str, size, format, ap); - if (ret < 0) { - ret = _vscprintf(format, ap_copy); - } - va_end(ap_copy); - return ret; -} - -static inline int - PRINTFLIKE(3, 4) -util_snprintf(char *str, size_t size, const char *format, ...) -{ - va_list ap; - int ret; - va_start(ap, format); - ret = util_vsnprintf(str, size, format, ap); - va_end(ap); - return ret; -} - -static inline void -util_vsprintf(char *str, const char *format, va_list ap) -{ - util_vsnprintf(str, (size_t)-1, format, ap); -} - +#define sprintf util_sprintf static inline void PRINTFLIKE(2, 3) util_sprintf(char *str, const char *format, ...) { va_list ap; va_start(ap, format); - util_vsnprintf(str, (size_t)-1, format, ap); + vsnprintf(str, (size_t)-1, format, ap); va_end(ap); } +#define vasprintf util_vasprintf static inline int util_vasprintf(char **ret, const char *format, va_list ap) { @@ -120,7 +84,7 @@ util_vasprintf(char **ret, const char *format, va_list ap) /* Compute length of output string first */ va_copy(ap_copy, ap); - int r = util_vsnprintf(NULL, 0, format, ap_copy); + int r = vsnprintf(NULL, 0, format, ap_copy); va_end(ap_copy); if (r < 0) @@ -131,95 +95,30 @@ util_vasprintf(char **ret, const char *format, va_list ap) return -1; /* Print to buffer */ - return util_vsnprintf(*ret, r + 1, format, ap); -} - -static inline char * -util_strchr(const char *s, char c) -{ - char *p = util_strchrnul(s, c); - - return *p ? p : NULL; -} - -static inline char* -util_strncat(char *dst, const char *src, size_t n) -{ - char *p = dst + strlen(dst); - const char *q = src; - size_t i; - - for (i = 0; i < n && *q != '\0'; ++i) - *p++ = *q++; - *p = '\0'; - - return dst; + return vsnprintf(*ret, r + 1, format, ap); } +#define asprintf util_asprintf static inline int -util_strcmp(const char *s1, const char *s2) +util_asprintf(char **str, const char *fmt, ...) { - unsigned char u1, u2; - - while (1) { - u1 = (unsigned char) *s1++; - u2 = (unsigned char) *s2++; - if (u1 != u2) - return u1 - u2; - if (u1 == '\0') - return 0; - } - return 0; -} - -static inline int -util_strncmp(const char *s1, const char *s2, size_t n) -{ - unsigned char u1, u2; - - while (n-- > 0) { - u1 = (unsigned char) *s1++; - u2 = (unsigned char) *s2++; - if (u1 != u2) - return u1 - u2; - if (u1 == '\0') - return 0; - } - return 0; -} - -static inline char * -util_strstr(const char *haystack, const char *needle) -{ - const char *p = haystack; - size_t len = strlen(needle); - - for (; (p = util_strchr(p, *needle)) != 0; p++) { - if (util_strncmp(p, needle, len) == 0) { - return (char *)p; - } - } - return NULL; + int ret; + va_list args; + va_start(args, fmt); + ret = vasprintf(str, fmt, args); + va_end(args); + return ret; } +#ifndef strcasecmp +#define strcasecmp stricmp +#endif -#define util_strcasecmp stricmp -#define util_strdup _strdup - -#else +#define strdup _strdup -#define util_vsnprintf vsnprintf -#define util_snprintf snprintf -#define util_vsprintf vsprintf -#define util_vasprintf vasprintf -#define util_sprintf sprintf -#define util_strchr strchr -#define util_strcmp strcmp -#define util_strncmp strncmp -#define util_strncat strncat -#define util_strstr strstr -#define util_strcasecmp strcasecmp -#define util_strdup strdup +#if defined(_WIN32) && !defined(HAVE_STRTOK_R) +#define strtok_r strtok_s +#endif #endif