1 /* $Id$ */ 2 /* 3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) 4 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 #ifndef __PJ_COMPAT_STRING_H__ 21 #define __PJ_COMPAT_STRING_H__ 22 23 /** 24 * @file string.h 25 * @brief Provides string manipulation functions found in ANSI string.h. 26 */ 27 28 29 #if defined(PJ_HAS_STRING_H) && PJ_HAS_STRING_H != 0 30 # include <string.h> 31 #else 32 33 PJ_DECL(int) strcasecmp(const char *s1, const char *s2); 34 PJ_DECL(int) strncasecmp(const char *s1, const char *s2, int len); 35 36 #endif 37 38 /* For sprintf family */ 39 #include <stdio.h> 40 41 /* On WinCE, string stuffs are declared in stdlib.h */ 42 #if defined(PJ_HAS_STDLIB_H) && PJ_HAS_STDLIB_H!=0 43 # include <stdlib.h> 44 #endif 45 46 #if defined(_MSC_VER) 47 # define strcasecmp _stricmp 48 # define strncasecmp _strnicmp 49 # define snprintf _snprintf 50 # define vsnprintf _vsnprintf 51 # define snwprintf _snwprintf 52 # define wcsicmp _wcsicmp 53 # define wcsnicmp _wcsnicmp 54 #else 55 # define stricmp strcasecmp 56 # define strnicmp strncasecmp 57 58 # if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0 59 # error "Implement Unicode string functions" 60 # endif 61 #endif 62 63 #define pj_ansi_strcmp strcmp 64 #define pj_ansi_strncmp strncmp 65 #define pj_ansi_strlen strlen 66 #define pj_ansi_strcpy strcpy 67 #define pj_ansi_strncpy strncpy 68 #define pj_ansi_strcat strcat 69 #define pj_ansi_strstr strstr 70 #define pj_ansi_strchr strchr 71 #define pj_ansi_strcasecmp strcasecmp 72 #define pj_ansi_stricmp strcasecmp 73 #define pj_ansi_strncasecmp strncasecmp 74 #define pj_ansi_strnicmp strncasecmp 75 #define pj_ansi_sprintf sprintf 76 77 #if defined(PJ_HAS_NO_SNPRINTF) && PJ_HAS_NO_SNPRINTF != 0 78 # include <pj/types.h> 79 # include <pj/compat/stdarg.h> 80 PJ_BEGIN_DECL 81 PJ_DECL(int) snprintf(char*s1, pj_size_t len, const char*s2, ...); 82 PJ_DECL(int) vsnprintf(char*s1, pj_size_t len, const char*s2, va_list arg); 83 PJ_END_DECL 84 #endif 85 86 #define pj_ansi_snprintf snprintf 87 #define pj_ansi_vsprintf vsprintf 88 #define pj_ansi_vsnprintf vsnprintf 89 90 #define pj_unicode_strcmp wcscmp 91 #define pj_unicode_strncmp wcsncmp 92 #define pj_unicode_strlen wcslen 93 #define pj_unicode_strcpy wcscpy 94 #define pj_unicode_strncpy wcsncpy 95 #define pj_unicode_strcat wcscat 96 #define pj_unicode_strstr wcsstr 97 #define pj_unicode_strchr wcschr 98 #define pj_unicode_strcasecmp wcsicmp 99 #define pj_unicode_stricmp wcsicmp 100 #define pj_unicode_strncasecmp wcsnicmp 101 #define pj_unicode_strnicmp wcsnicmp 102 #define pj_unicode_sprintf swprintf 103 #define pj_unicode_snprintf snwprintf 104 #define pj_unicode_vsprintf vswprintf 105 #define pj_unicode_vsnprintf vsnwprintf 106 107 #if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0 108 # define pj_native_strcmp pj_unicode_strcmp 109 # define pj_native_strncmp pj_unicode_strncmp 110 # define pj_native_strlen pj_unicode_strlen 111 # define pj_native_strcpy pj_unicode_strcpy 112 # define pj_native_strncpy pj_unicode_strncpy 113 # define pj_native_strcat pj_unicode_strcat 114 # define pj_native_strstr pj_unicode_strstr 115 # define pj_native_strchr pj_unicode_strchr 116 # define pj_native_strcasecmp pj_unicode_strcasecmp 117 # define pj_native_stricmp pj_unicode_stricmp 118 # define pj_native_strncasecmp pj_unicode_strncasecmp 119 # define pj_native_strnicmp pj_unicode_strnicmp 120 # define pj_native_sprintf pj_unicode_sprintf 121 # define pj_native_snprintf pj_unicode_snprintf 122 # define pj_native_vsprintf pj_unicode_vsprintf 123 # define pj_native_vsnprintf pj_unicode_vsnprintf 124 #else 125 # define pj_native_strcmp pj_ansi_strcmp 126 # define pj_native_strncmp pj_ansi_strncmp 127 # define pj_native_strlen pj_ansi_strlen 128 # define pj_native_strcpy pj_ansi_strcpy 129 # define pj_native_strncpy pj_ansi_strncpy 130 # define pj_native_strcat pj_ansi_strcat 131 # define pj_native_strstr pj_ansi_strstr 132 # define pj_native_strchr pj_ansi_strchr 133 # define pj_native_strcasecmp pj_ansi_strcasecmp 134 # define pj_native_stricmp pj_ansi_stricmp 135 # define pj_native_strncasecmp pj_ansi_strncasecmp 136 # define pj_native_strnicmp pj_ansi_strnicmp 137 # define pj_native_sprintf pj_ansi_sprintf 138 # define pj_native_snprintf pj_ansi_snprintf 139 # define pj_native_vsprintf pj_ansi_vsprintf 140 # define pj_native_vsnprintf pj_ansi_vsnprintf 141 #endif 142 143 144 #endif /* __PJ_COMPAT_STRING_H__ */ 145