This requires u_string.h to be updated as well. There is no more string functions prefixed by util_. pipe_debug_message is removed as well. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com> Acked-by: Gert Wollny <gert.wollny@collabora.com>macos/master
parent
049ee8ff40
commit
9526a95d47
@ -1,232 +0,0 @@ |
|||||||
/**************************************************************************
|
|
||||||
* |
|
||||||
* Copyright 2008 VMware, Inc. |
|
||||||
* All Rights Reserved. |
|
||||||
* |
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a |
|
||||||
* copy of this software and associated documentation files (the |
|
||||||
* "Software"), to deal in the Software without restriction, including |
|
||||||
* without limitation the rights to use, copy, modify, merge, publish, |
|
||||||
* distribute, sub license, and/or sell copies of the Software, and to |
|
||||||
* permit persons to whom the Software is furnished to do so, subject to |
|
||||||
* the following conditions: |
|
||||||
* |
|
||||||
* The above copyright notice and this permission notice (including the |
|
||||||
* next paragraph) shall be included in all copies or substantial portions |
|
||||||
* of the Software. |
|
||||||
* |
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
||||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
|
||||||
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR |
|
||||||
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
||||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
||||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
||||||
* |
|
||||||
**************************************************************************/ |
|
||||||
|
|
||||||
/**
|
|
||||||
* @file |
|
||||||
* Platform independent functions for string manipulation. |
|
||||||
* |
|
||||||
* @author Jose Fonseca <jfonseca@vmware.com> |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef U_STRING_H_ |
|
||||||
#define U_STRING_H_ |
|
||||||
|
|
||||||
#if !defined(_MSC_VER) && !defined(XF86_LIBC_H) |
|
||||||
#include <stdio.h> |
|
||||||
#endif |
|
||||||
#include <stddef.h> |
|
||||||
#include <stdarg.h> |
|
||||||
|
|
||||||
#include "pipe/p_compiler.h" |
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
extern "C" { |
|
||||||
#endif |
|
||||||
|
|
||||||
#ifdef _GNU_SOURCE |
|
||||||
|
|
||||||
#define util_strchrnul strchrnul |
|
||||||
|
|
||||||
#else |
|
||||||
|
|
||||||
static inline char * |
|
||||||
util_strchrnul(const char *s, char c) |
|
||||||
{ |
|
||||||
for (; *s && *s != c; ++s); |
|
||||||
|
|
||||||
return (char *)s; |
|
||||||
} |
|
||||||
|
|
||||||
#endif |
|
||||||
|
|
||||||
#ifdef _MSC_VER |
|
||||||
|
|
||||||
int util_vsnprintf(char *, size_t, const char *, va_list); |
|
||||||
int util_snprintf(char *str, size_t size, const char *format, ...); |
|
||||||
|
|
||||||
static inline void |
|
||||||
util_vsprintf(char *str, const char *format, va_list ap) |
|
||||||
{ |
|
||||||
util_vsnprintf(str, (size_t)-1, format, ap); |
|
||||||
} |
|
||||||
|
|
||||||
static inline void |
|
||||||
util_sprintf(char *str, const char *format, ...) |
|
||||||
{ |
|
||||||
va_list ap; |
|
||||||
va_start(ap, format); |
|
||||||
util_vsnprintf(str, (size_t)-1, format, ap); |
|
||||||
va_end(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; |
|
||||||
} |
|
||||||
|
|
||||||
static inline int |
|
||||||
util_strcmp(const char *s1, const char *s2) |
|
||||||
{ |
|
||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
static inline void * |
|
||||||
util_memmove(void *dest, const void *src, size_t n) |
|
||||||
{ |
|
||||||
char *p = (char *)dest; |
|
||||||
const char *q = (const char *)src; |
|
||||||
if (dest < src) { |
|
||||||
while (n--) |
|
||||||
*p++ = *q++; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
p += n; |
|
||||||
q += n; |
|
||||||
while (n--) |
|
||||||
*--p = *--q; |
|
||||||
} |
|
||||||
return dest; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
#else |
|
||||||
|
|
||||||
#define util_vsnprintf vsnprintf |
|
||||||
#define util_snprintf snprintf |
|
||||||
#define util_vsprintf vsprintf |
|
||||||
#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_memmove memmove |
|
||||||
|
|
||||||
#endif |
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Printable string buffer |
|
||||||
*/ |
|
||||||
struct util_strbuf |
|
||||||
{ |
|
||||||
char *str; |
|
||||||
char *ptr; |
|
||||||
size_t left; |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
static inline void |
|
||||||
util_strbuf_init(struct util_strbuf *sbuf, char *str, size_t size)
|
|
||||||
{ |
|
||||||
sbuf->str = str; |
|
||||||
sbuf->str[0] = 0; |
|
||||||
sbuf->ptr = sbuf->str; |
|
||||||
sbuf->left = size; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
static inline void |
|
||||||
util_strbuf_printf(struct util_strbuf *sbuf, const char *format, ...) |
|
||||||
{ |
|
||||||
if(sbuf->left > 1) { |
|
||||||
size_t written; |
|
||||||
va_list ap; |
|
||||||
va_start(ap, format); |
|
||||||
written = util_vsnprintf(sbuf->ptr, sbuf->left, format, ap); |
|
||||||
va_end(ap); |
|
||||||
sbuf->ptr += written; |
|
||||||
sbuf->left -= written; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
} |
|
||||||
#endif |
|
||||||
|
|
||||||
#endif /* U_STRING_H_ */ |
|
@ -0,0 +1,131 @@ |
|||||||
|
/**************************************************************************
|
||||||
|
* |
||||||
|
* Copyright 2008 VMware, Inc. |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
* copy of this software and associated documentation files (the |
||||||
|
* "Software"), to deal in the Software without restriction, including |
||||||
|
* without limitation the rights to use, copy, modify, merge, publish, |
||||||
|
* distribute, sub license, and/or sell copies of the Software, and to |
||||||
|
* permit persons to whom the Software is furnished to do so, subject to |
||||||
|
* the following conditions: |
||||||
|
* |
||||||
|
* The above copyright notice and this permission notice (including the |
||||||
|
* next paragraph) shall be included in all copies or substantial portions |
||||||
|
* of the Software. |
||||||
|
* |
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
||||||
|
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR |
||||||
|
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||||
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||||
|
* |
||||||
|
**************************************************************************/ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @file |
||||||
|
* Platform independent functions for string manipulation. |
||||||
|
* |
||||||
|
* @author Jose Fonseca <jfonseca@vmware.com> |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef U_STRING_H_ |
||||||
|
#define U_STRING_H_ |
||||||
|
|
||||||
|
#if !defined(XF86_LIBC_H) |
||||||
|
#include <stdio.h> |
||||||
|
#endif |
||||||
|
#include <stdlib.h> |
||||||
|
#include <stddef.h> |
||||||
|
#include <stdarg.h> |
||||||
|
#include <string.h> |
||||||
|
#include <limits.h> |
||||||
|
|
||||||
|
#include "util/macros.h" // PRINTFLIKE |
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
#if !defined(_GNU_SOURCE) || defined(__APPLE__) |
||||||
|
|
||||||
|
#define strchrnul util_strchrnul |
||||||
|
static inline char * |
||||||
|
util_strchrnul(const char *s, char c) |
||||||
|
{ |
||||||
|
for (; *s && *s != c; ++s); |
||||||
|
|
||||||
|
return (char *)s; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef _WIN32 |
||||||
|
|
||||||
|
#define sprintf util_sprintf |
||||||
|
static inline void |
||||||
|
PRINTFLIKE(2, 3) |
||||||
|
util_sprintf(char *str, const char *format, ...) |
||||||
|
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, format); |
||||||
|
vsnprintf(str, INT_MAX, format, ap); |
||||||
|
va_end(ap); |
||||||
|
} |
||||||
|
|
||||||
|
#define vasprintf util_vasprintf |
||||||
|
static inline int |
||||||
|
util_vasprintf(char **ret, const char *format, va_list ap) |
||||||
|
{ |
||||||
|
va_list ap_copy; |
||||||
|
|
||||||
|
/* Compute length of output string first */ |
||||||
|
va_copy(ap_copy, ap); |
||||||
|
int r = vsnprintf(NULL, 0, format, ap_copy); |
||||||
|
va_end(ap_copy); |
||||||
|
|
||||||
|
if (r < 0) |
||||||
|
return -1; |
||||||
|
|
||||||
|
*ret = (char *) malloc(r + 1); |
||||||
|
if (!*ret) |
||||||
|
return -1; |
||||||
|
|
||||||
|
/* Print to buffer */ |
||||||
|
return vsnprintf(*ret, r + 1, format, ap); |
||||||
|
} |
||||||
|
|
||||||
|
#define asprintf util_asprintf |
||||||
|
static inline int |
||||||
|
util_asprintf(char **str, const char *fmt, ...) |
||||||
|
{ |
||||||
|
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 strdup _strdup |
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(HAVE_STRTOK_R) |
||||||
|
#define strtok_r strtok_s |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* U_STRING_H_ */ |
Loading…
Reference in new issue