diff options
Diffstat (limited to 'gl/string.in.h')
| -rw-r--r-- | gl/string.in.h | 729 |
1 files changed, 521 insertions, 208 deletions
diff --git a/gl/string.in.h b/gl/string.in.h index f021a3ed..eb8d7588 100644 --- a/gl/string.in.h +++ b/gl/string.in.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* A GNU-like <string.h>. | 1 | /* A GNU-like <string.h>. |
| 2 | 2 | ||
| 3 | Copyright (C) 1995-1996, 2001-2008 Free Software Foundation, Inc. | 3 | Copyright (C) 1995-1996, 2001-2010 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
| 6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
| @@ -28,6 +28,13 @@ | |||
| 28 | #ifndef _GL_STRING_H | 28 | #ifndef _GL_STRING_H |
| 29 | #define _GL_STRING_H | 29 | #define _GL_STRING_H |
| 30 | 30 | ||
| 31 | /* NetBSD 5.0 mis-defines NULL. */ | ||
| 32 | #include <stddef.h> | ||
| 33 | |||
| 34 | /* MirBSD defines mbslen as a macro. */ | ||
| 35 | #if @GNULIB_MBSLEN@ && defined __MirBSD__ | ||
| 36 | # include <wchar.h> | ||
| 37 | #endif | ||
| 31 | 38 | ||
| 32 | #ifndef __attribute__ | 39 | #ifndef __attribute__ |
| 33 | /* This feature is available in gcc versions 2.5 and later. */ | 40 | /* This feature is available in gcc versions 2.5 and later. */ |
| @@ -41,60 +48,132 @@ | |||
| 41 | #endif | 48 | #endif |
| 42 | 49 | ||
| 43 | 50 | ||
| 44 | /* The definition of GL_LINK_WARNING is copied here. */ | 51 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
| 45 | 52 | ||
| 46 | 53 | /* The definition of _GL_ARG_NONNULL is copied here. */ | |
| 47 | #ifdef __cplusplus | 54 | |
| 48 | extern "C" { | 55 | /* The definition of _GL_WARN_ON_USE is copied here. */ |
| 56 | |||
| 57 | |||
| 58 | /* Return the first instance of C within N bytes of S, or NULL. */ | ||
| 59 | #if @GNULIB_MEMCHR@ | ||
| 60 | # if @REPLACE_MEMCHR@ | ||
| 61 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
| 62 | # define memchr rpl_memchr | ||
| 63 | # endif | ||
| 64 | _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) | ||
| 65 | __attribute__ ((__pure__)) | ||
| 66 | _GL_ARG_NONNULL ((1))); | ||
| 67 | _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); | ||
| 68 | # else | ||
| 69 | # if ! @HAVE_MEMCHR@ | ||
| 70 | _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) | ||
| 71 | __attribute__ ((__pure__)) | ||
| 72 | _GL_ARG_NONNULL ((1))); | ||
| 73 | # endif | ||
| 74 | /* On some systems, this function is defined as an overloaded function: | ||
| 75 | extern "C" { const void * std::memchr (const void *, int, size_t); } | ||
| 76 | extern "C++" { void * std::memchr (void *, int, size_t); } */ | ||
| 77 | _GL_CXXALIAS_SYS_CAST2 (memchr, | ||
| 78 | void *, (void const *__s, int __c, size_t __n), | ||
| 79 | void const *, (void const *__s, int __c, size_t __n)); | ||
| 80 | # endif | ||
| 81 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 82 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 83 | _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); | ||
| 84 | _GL_CXXALIASWARN1 (memchr, void const *, | ||
| 85 | (void const *__s, int __c, size_t __n)); | ||
| 86 | # else | ||
| 87 | _GL_CXXALIASWARN (memchr); | ||
| 88 | # endif | ||
| 89 | #elif defined GNULIB_POSIXCHECK | ||
| 90 | # undef memchr | ||
| 91 | /* Assume memchr is always declared. */ | ||
| 92 | _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " | ||
| 93 | "use gnulib module memchr for portability" ); | ||
| 49 | #endif | 94 | #endif |
| 50 | 95 | ||
| 51 | |||
| 52 | /* Return the first occurrence of NEEDLE in HAYSTACK. */ | 96 | /* Return the first occurrence of NEEDLE in HAYSTACK. */ |
| 53 | #if @GNULIB_MEMMEM@ | 97 | #if @GNULIB_MEMMEM@ |
| 54 | # if @REPLACE_MEMMEM@ | 98 | # if @REPLACE_MEMMEM@ |
| 55 | # define memmem rpl_memmem | 99 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 56 | # endif | 100 | # define memmem rpl_memmem |
| 57 | # if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ | 101 | # endif |
| 58 | extern void *memmem (void const *__haystack, size_t __haystack_len, | 102 | _GL_FUNCDECL_RPL (memmem, void *, |
| 59 | void const *__needle, size_t __needle_len) | 103 | (void const *__haystack, size_t __haystack_len, |
| 60 | __attribute__ ((__pure__)); | 104 | void const *__needle, size_t __needle_len) |
| 105 | __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3))); | ||
| 106 | _GL_CXXALIAS_RPL (memmem, void *, | ||
| 107 | (void const *__haystack, size_t __haystack_len, | ||
| 108 | void const *__needle, size_t __needle_len)); | ||
| 109 | # else | ||
| 110 | # if ! @HAVE_DECL_MEMMEM@ | ||
| 111 | _GL_FUNCDECL_SYS (memmem, void *, | ||
| 112 | (void const *__haystack, size_t __haystack_len, | ||
| 113 | void const *__needle, size_t __needle_len) | ||
| 114 | __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3))); | ||
| 115 | # endif | ||
| 116 | _GL_CXXALIAS_SYS (memmem, void *, | ||
| 117 | (void const *__haystack, size_t __haystack_len, | ||
| 118 | void const *__needle, size_t __needle_len)); | ||
| 61 | # endif | 119 | # endif |
| 120 | _GL_CXXALIASWARN (memmem); | ||
| 62 | #elif defined GNULIB_POSIXCHECK | 121 | #elif defined GNULIB_POSIXCHECK |
| 63 | # undef memmem | 122 | # undef memmem |
| 64 | # define memmem(a,al,b,bl) \ | 123 | # if HAVE_RAW_DECL_MEMMEM |
| 65 | (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ | 124 | _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " |
| 66 | "use gnulib module memmem-simple for portability, " \ | 125 | "use gnulib module memmem-simple for portability, " |
| 67 | "and module memmem for speed" ), \ | 126 | "and module memmem for speed" ); |
| 68 | memmem (a, al, b, bl)) | 127 | # endif |
| 69 | #endif | 128 | #endif |
| 70 | 129 | ||
| 71 | /* Copy N bytes of SRC to DEST, return pointer to bytes after the | 130 | /* Copy N bytes of SRC to DEST, return pointer to bytes after the |
| 72 | last written byte. */ | 131 | last written byte. */ |
| 73 | #if @GNULIB_MEMPCPY@ | 132 | #if @GNULIB_MEMPCPY@ |
| 74 | # if ! @HAVE_MEMPCPY@ | 133 | # if ! @HAVE_MEMPCPY@ |
| 75 | extern void *mempcpy (void *restrict __dest, void const *restrict __src, | 134 | _GL_FUNCDECL_SYS (mempcpy, void *, |
| 76 | size_t __n); | 135 | (void *restrict __dest, void const *restrict __src, |
| 136 | size_t __n) | ||
| 137 | _GL_ARG_NONNULL ((1, 2))); | ||
| 77 | # endif | 138 | # endif |
| 139 | _GL_CXXALIAS_SYS (mempcpy, void *, | ||
| 140 | (void *restrict __dest, void const *restrict __src, | ||
| 141 | size_t __n)); | ||
| 142 | _GL_CXXALIASWARN (mempcpy); | ||
| 78 | #elif defined GNULIB_POSIXCHECK | 143 | #elif defined GNULIB_POSIXCHECK |
| 79 | # undef mempcpy | 144 | # undef mempcpy |
| 80 | # define mempcpy(a,b,n) \ | 145 | # if HAVE_RAW_DECL_MEMPCPY |
| 81 | (GL_LINK_WARNING ("mempcpy is unportable - " \ | 146 | _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " |
| 82 | "use gnulib module mempcpy for portability"), \ | 147 | "use gnulib module mempcpy for portability"); |
| 83 | mempcpy (a, b, n)) | 148 | # endif |
| 84 | #endif | 149 | #endif |
| 85 | 150 | ||
| 86 | /* Search backwards through a block for a byte (specified as an int). */ | 151 | /* Search backwards through a block for a byte (specified as an int). */ |
| 87 | #if @GNULIB_MEMRCHR@ | 152 | #if @GNULIB_MEMRCHR@ |
| 88 | # if ! @HAVE_DECL_MEMRCHR@ | 153 | # if ! @HAVE_DECL_MEMRCHR@ |
| 89 | extern void *memrchr (void const *, int, size_t) | 154 | _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) |
| 90 | __attribute__ ((__pure__)); | 155 | __attribute__ ((__pure__)) |
| 156 | _GL_ARG_NONNULL ((1))); | ||
| 157 | # endif | ||
| 158 | /* On some systems, this function is defined as an overloaded function: | ||
| 159 | extern "C++" { const void * std::memrchr (const void *, int, size_t); } | ||
| 160 | extern "C++" { void * std::memrchr (void *, int, size_t); } */ | ||
| 161 | _GL_CXXALIAS_SYS_CAST2 (memrchr, | ||
| 162 | void *, (void const *, int, size_t), | ||
| 163 | void const *, (void const *, int, size_t)); | ||
| 164 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 165 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 166 | _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); | ||
| 167 | _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); | ||
| 168 | # else | ||
| 169 | _GL_CXXALIASWARN (memrchr); | ||
| 91 | # endif | 170 | # endif |
| 92 | #elif defined GNULIB_POSIXCHECK | 171 | #elif defined GNULIB_POSIXCHECK |
| 93 | # undef memrchr | 172 | # undef memrchr |
| 94 | # define memrchr(a,b,c) \ | 173 | # if HAVE_RAW_DECL_MEMRCHR |
| 95 | (GL_LINK_WARNING ("memrchr is unportable - " \ | 174 | _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " |
| 96 | "use gnulib module memrchr for portability"), \ | 175 | "use gnulib module memrchr for portability"); |
| 97 | memrchr (a, b, c)) | 176 | # endif |
| 98 | #endif | 177 | #endif |
| 99 | 178 | ||
| 100 | /* Find the first occurrence of C in S. More efficient than | 179 | /* Find the first occurrence of C in S. More efficient than |
| @@ -102,103 +181,191 @@ extern void *memrchr (void const *, int, size_t) | |||
| 102 | occur within N bytes. */ | 181 | occur within N bytes. */ |
| 103 | #if @GNULIB_RAWMEMCHR@ | 182 | #if @GNULIB_RAWMEMCHR@ |
| 104 | # if ! @HAVE_RAWMEMCHR@ | 183 | # if ! @HAVE_RAWMEMCHR@ |
| 105 | extern void *rawmemchr (void const *__s, int __c_in) | 184 | _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) |
| 106 | __attribute__ ((__pure__)); | 185 | __attribute__ ((__pure__)) |
| 186 | _GL_ARG_NONNULL ((1))); | ||
| 187 | # endif | ||
| 188 | /* On some systems, this function is defined as an overloaded function: | ||
| 189 | extern "C++" { const void * std::rawmemchr (const void *, int); } | ||
| 190 | extern "C++" { void * std::rawmemchr (void *, int); } */ | ||
| 191 | _GL_CXXALIAS_SYS_CAST2 (rawmemchr, | ||
| 192 | void *, (void const *__s, int __c_in), | ||
| 193 | void const *, (void const *__s, int __c_in)); | ||
| 194 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 195 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 196 | _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); | ||
| 197 | _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); | ||
| 198 | # else | ||
| 199 | _GL_CXXALIASWARN (rawmemchr); | ||
| 107 | # endif | 200 | # endif |
| 108 | #elif defined GNULIB_POSIXCHECK | 201 | #elif defined GNULIB_POSIXCHECK |
| 109 | # undef rawmemchr | 202 | # undef rawmemchr |
| 110 | # define rawmemchr(a,b) \ | 203 | # if HAVE_RAW_DECL_RAWMEMCHR |
| 111 | (GL_LINK_WARNING ("rawmemchr is unportable - " \ | 204 | _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " |
| 112 | "use gnulib module rawmemchr for portability"), \ | 205 | "use gnulib module rawmemchr for portability"); |
| 113 | rawmemchr (a, b)) | 206 | # endif |
| 114 | #endif | 207 | #endif |
| 115 | 208 | ||
| 116 | /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ | 209 | /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ |
| 117 | #if @GNULIB_STPCPY@ | 210 | #if @GNULIB_STPCPY@ |
| 118 | # if ! @HAVE_STPCPY@ | 211 | # if ! @HAVE_STPCPY@ |
| 119 | extern char *stpcpy (char *restrict __dst, char const *restrict __src); | 212 | _GL_FUNCDECL_SYS (stpcpy, char *, |
| 213 | (char *restrict __dst, char const *restrict __src) | ||
| 214 | _GL_ARG_NONNULL ((1, 2))); | ||
| 120 | # endif | 215 | # endif |
| 216 | _GL_CXXALIAS_SYS (stpcpy, char *, | ||
| 217 | (char *restrict __dst, char const *restrict __src)); | ||
| 218 | _GL_CXXALIASWARN (stpcpy); | ||
| 121 | #elif defined GNULIB_POSIXCHECK | 219 | #elif defined GNULIB_POSIXCHECK |
| 122 | # undef stpcpy | 220 | # undef stpcpy |
| 123 | # define stpcpy(a,b) \ | 221 | # if HAVE_RAW_DECL_STPCPY |
| 124 | (GL_LINK_WARNING ("stpcpy is unportable - " \ | 222 | _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " |
| 125 | "use gnulib module stpcpy for portability"), \ | 223 | "use gnulib module stpcpy for portability"); |
| 126 | stpcpy (a, b)) | 224 | # endif |
| 127 | #endif | 225 | #endif |
| 128 | 226 | ||
| 129 | /* Copy no more than N bytes of SRC to DST, returning a pointer past the | 227 | /* Copy no more than N bytes of SRC to DST, returning a pointer past the |
| 130 | last non-NUL byte written into DST. */ | 228 | last non-NUL byte written into DST. */ |
| 131 | #if @GNULIB_STPNCPY@ | 229 | #if @GNULIB_STPNCPY@ |
| 132 | # if ! @HAVE_STPNCPY@ | 230 | # if @REPLACE_STPNCPY@ |
| 133 | # define stpncpy gnu_stpncpy | 231 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 134 | extern char *stpncpy (char *restrict __dst, char const *restrict __src, | 232 | # define stpncpy rpl_stpncpy |
| 135 | size_t __n); | 233 | # endif |
| 234 | _GL_FUNCDECL_RPL (stpncpy, char *, | ||
| 235 | (char *restrict __dst, char const *restrict __src, | ||
| 236 | size_t __n) | ||
| 237 | _GL_ARG_NONNULL ((1, 2))); | ||
| 238 | _GL_CXXALIAS_RPL (stpncpy, char *, | ||
| 239 | (char *restrict __dst, char const *restrict __src, | ||
| 240 | size_t __n)); | ||
| 241 | # else | ||
| 242 | # if ! @HAVE_STPNCPY@ | ||
| 243 | _GL_FUNCDECL_SYS (stpncpy, char *, | ||
| 244 | (char *restrict __dst, char const *restrict __src, | ||
| 245 | size_t __n) | ||
| 246 | _GL_ARG_NONNULL ((1, 2))); | ||
| 247 | # endif | ||
| 248 | _GL_CXXALIAS_SYS (stpncpy, char *, | ||
| 249 | (char *restrict __dst, char const *restrict __src, | ||
| 250 | size_t __n)); | ||
| 136 | # endif | 251 | # endif |
| 252 | _GL_CXXALIASWARN (stpncpy); | ||
| 137 | #elif defined GNULIB_POSIXCHECK | 253 | #elif defined GNULIB_POSIXCHECK |
| 138 | # undef stpncpy | 254 | # undef stpncpy |
| 139 | # define stpncpy(a,b,n) \ | 255 | # if HAVE_RAW_DECL_STPNCPY |
| 140 | (GL_LINK_WARNING ("stpncpy is unportable - " \ | 256 | _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " |
| 141 | "use gnulib module stpncpy for portability"), \ | 257 | "use gnulib module stpncpy for portability"); |
| 142 | stpncpy (a, b, n)) | 258 | # endif |
| 143 | #endif | 259 | #endif |
| 144 | 260 | ||
| 145 | #if defined GNULIB_POSIXCHECK | 261 | #if defined GNULIB_POSIXCHECK |
| 146 | /* strchr() does not work with multibyte strings if the locale encoding is | 262 | /* strchr() does not work with multibyte strings if the locale encoding is |
| 147 | GB18030 and the character to be searched is a digit. */ | 263 | GB18030 and the character to be searched is a digit. */ |
| 148 | # undef strchr | 264 | # undef strchr |
| 149 | # define strchr(s,c) \ | 265 | /* Assume strchr is always declared. */ |
| 150 | (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ | 266 | _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " |
| 151 | "in some multibyte locales - " \ | 267 | "in some multibyte locales - " |
| 152 | "use mbschr if you care about internationalization"), \ | 268 | "use mbschr if you care about internationalization"); |
| 153 | strchr (s, c)) | ||
| 154 | #endif | 269 | #endif |
| 155 | 270 | ||
| 156 | /* Find the first occurrence of C in S or the final NUL byte. */ | 271 | /* Find the first occurrence of C in S or the final NUL byte. */ |
| 157 | #if @GNULIB_STRCHRNUL@ | 272 | #if @GNULIB_STRCHRNUL@ |
| 158 | # if ! @HAVE_STRCHRNUL@ | 273 | # if ! @HAVE_STRCHRNUL@ |
| 159 | extern char *strchrnul (char const *__s, int __c_in) | 274 | _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) |
| 160 | __attribute__ ((__pure__)); | 275 | __attribute__ ((__pure__)) |
| 276 | _GL_ARG_NONNULL ((1))); | ||
| 277 | # endif | ||
| 278 | /* On some systems, this function is defined as an overloaded function: | ||
| 279 | extern "C++" { const char * std::strchrnul (const char *, int); } | ||
| 280 | extern "C++" { char * std::strchrnul (char *, int); } */ | ||
| 281 | _GL_CXXALIAS_SYS_CAST2 (strchrnul, | ||
| 282 | char *, (char const *__s, int __c_in), | ||
| 283 | char const *, (char const *__s, int __c_in)); | ||
| 284 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 285 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 286 | _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); | ||
| 287 | _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); | ||
| 288 | # else | ||
| 289 | _GL_CXXALIASWARN (strchrnul); | ||
| 161 | # endif | 290 | # endif |
| 162 | #elif defined GNULIB_POSIXCHECK | 291 | #elif defined GNULIB_POSIXCHECK |
| 163 | # undef strchrnul | 292 | # undef strchrnul |
| 164 | # define strchrnul(a,b) \ | 293 | # if HAVE_RAW_DECL_STRCHRNUL |
| 165 | (GL_LINK_WARNING ("strchrnul is unportable - " \ | 294 | _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " |
| 166 | "use gnulib module strchrnul for portability"), \ | 295 | "use gnulib module strchrnul for portability"); |
| 167 | strchrnul (a, b)) | 296 | # endif |
| 168 | #endif | 297 | #endif |
| 169 | 298 | ||
| 170 | /* Duplicate S, returning an identical malloc'd string. */ | 299 | /* Duplicate S, returning an identical malloc'd string. */ |
| 171 | #if @GNULIB_STRDUP@ | 300 | #if @GNULIB_STRDUP@ |
| 172 | # if @REPLACE_STRDUP@ | 301 | # if @REPLACE_STRDUP@ |
| 173 | # undef strdup | 302 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 174 | # define strdup rpl_strdup | 303 | # undef strdup |
| 175 | # endif | 304 | # define strdup rpl_strdup |
| 176 | # if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@ | 305 | # endif |
| 177 | extern char *strdup (char const *__s); | 306 | _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); |
| 307 | _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); | ||
| 308 | # else | ||
| 309 | # if !(@HAVE_DECL_STRDUP@ || defined strdup) | ||
| 310 | _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); | ||
| 311 | # endif | ||
| 312 | _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); | ||
| 178 | # endif | 313 | # endif |
| 314 | _GL_CXXALIASWARN (strdup); | ||
| 179 | #elif defined GNULIB_POSIXCHECK | 315 | #elif defined GNULIB_POSIXCHECK |
| 180 | # undef strdup | 316 | # undef strdup |
| 181 | # define strdup(a) \ | 317 | # if HAVE_RAW_DECL_STRDUP |
| 182 | (GL_LINK_WARNING ("strdup is unportable - " \ | 318 | _GL_WARN_ON_USE (strdup, "strdup is unportable - " |
| 183 | "use gnulib module strdup for portability"), \ | 319 | "use gnulib module strdup for portability"); |
| 184 | strdup (a)) | 320 | # endif |
| 321 | #endif | ||
| 322 | |||
| 323 | /* Append no more than N characters from SRC onto DEST. */ | ||
| 324 | #if @GNULIB_STRNCAT@ | ||
| 325 | # if @REPLACE_STRNCAT@ | ||
| 326 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
| 327 | # undef strncat | ||
| 328 | # define strncat rpl_strncat | ||
| 329 | # endif | ||
| 330 | _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) | ||
| 331 | _GL_ARG_NONNULL ((1, 2))); | ||
| 332 | _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); | ||
| 333 | # else | ||
| 334 | _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); | ||
| 335 | # endif | ||
| 336 | _GL_CXXALIASWARN (strncat); | ||
| 337 | #elif defined GNULIB_POSIXCHECK | ||
| 338 | # undef strncat | ||
| 339 | # if HAVE_RAW_DECL_STRNCAT | ||
| 340 | _GL_WARN_ON_USE (strncat, "strncat is unportable - " | ||
| 341 | "use gnulib module strncat for portability"); | ||
| 342 | # endif | ||
| 185 | #endif | 343 | #endif |
| 186 | 344 | ||
| 187 | /* Return a newly allocated copy of at most N bytes of STRING. */ | 345 | /* Return a newly allocated copy of at most N bytes of STRING. */ |
| 188 | #if @GNULIB_STRNDUP@ | 346 | #if @GNULIB_STRNDUP@ |
| 189 | # if ! @HAVE_STRNDUP@ | 347 | # if @REPLACE_STRNDUP@ |
| 190 | # undef strndup | 348 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 191 | # define strndup rpl_strndup | 349 | # undef strndup |
| 192 | # endif | 350 | # define strndup rpl_strndup |
| 193 | # if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ | 351 | # endif |
| 194 | extern char *strndup (char const *__string, size_t __n); | 352 | _GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) |
| 353 | _GL_ARG_NONNULL ((1))); | ||
| 354 | _GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); | ||
| 355 | # else | ||
| 356 | # if ! @HAVE_DECL_STRNDUP@ | ||
| 357 | _GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) | ||
| 358 | _GL_ARG_NONNULL ((1))); | ||
| 359 | # endif | ||
| 360 | _GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); | ||
| 195 | # endif | 361 | # endif |
| 362 | _GL_CXXALIASWARN (strndup); | ||
| 196 | #elif defined GNULIB_POSIXCHECK | 363 | #elif defined GNULIB_POSIXCHECK |
| 197 | # undef strndup | 364 | # undef strndup |
| 198 | # define strndup(a,n) \ | 365 | # if HAVE_RAW_DECL_STRNDUP |
| 199 | (GL_LINK_WARNING ("strndup is unportable - " \ | 366 | _GL_WARN_ON_USE (strndup, "strndup is unportable - " |
| 200 | "use gnulib module strndup for portability"), \ | 367 | "use gnulib module strndup for portability"); |
| 201 | strndup (a, n)) | 368 | # endif |
| 202 | #endif | 369 | #endif |
| 203 | 370 | ||
| 204 | /* Find the length (number of bytes) of STRING, but scan at most | 371 | /* Find the length (number of bytes) of STRING, but scan at most |
| @@ -206,15 +373,18 @@ extern char *strndup (char const *__string, size_t __n); | |||
| 206 | return MAXLEN. */ | 373 | return MAXLEN. */ |
| 207 | #if @GNULIB_STRNLEN@ | 374 | #if @GNULIB_STRNLEN@ |
| 208 | # if ! @HAVE_DECL_STRNLEN@ | 375 | # if ! @HAVE_DECL_STRNLEN@ |
| 209 | extern size_t strnlen (char const *__string, size_t __maxlen) | 376 | _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) |
| 210 | __attribute__ ((__pure__)); | 377 | __attribute__ ((__pure__)) |
| 378 | _GL_ARG_NONNULL ((1))); | ||
| 211 | # endif | 379 | # endif |
| 380 | _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); | ||
| 381 | _GL_CXXALIASWARN (strnlen); | ||
| 212 | #elif defined GNULIB_POSIXCHECK | 382 | #elif defined GNULIB_POSIXCHECK |
| 213 | # undef strnlen | 383 | # undef strnlen |
| 214 | # define strnlen(a,n) \ | 384 | # if HAVE_RAW_DECL_STRNLEN |
| 215 | (GL_LINK_WARNING ("strnlen is unportable - " \ | 385 | _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " |
| 216 | "use gnulib module strnlen for portability"), \ | 386 | "use gnulib module strnlen for portability"); |
| 217 | strnlen (a, n)) | 387 | # endif |
| 218 | #endif | 388 | #endif |
| 219 | 389 | ||
| 220 | #if defined GNULIB_POSIXCHECK | 390 | #if defined GNULIB_POSIXCHECK |
| @@ -223,18 +393,32 @@ extern size_t strnlen (char const *__string, size_t __maxlen) | |||
| 223 | locale encoding is GB18030 and one of the characters to be searched is a | 393 | locale encoding is GB18030 and one of the characters to be searched is a |
| 224 | digit. */ | 394 | digit. */ |
| 225 | # undef strcspn | 395 | # undef strcspn |
| 226 | # define strcspn(s,a) \ | 396 | /* Assume strcspn is always declared. */ |
| 227 | (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ | 397 | _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " |
| 228 | "in multibyte locales - " \ | 398 | "in multibyte locales - " |
| 229 | "use mbscspn if you care about internationalization"), \ | 399 | "use mbscspn if you care about internationalization"); |
| 230 | strcspn (s, a)) | ||
| 231 | #endif | 400 | #endif |
| 232 | 401 | ||
| 233 | /* Find the first occurrence in S of any character in ACCEPT. */ | 402 | /* Find the first occurrence in S of any character in ACCEPT. */ |
| 234 | #if @GNULIB_STRPBRK@ | 403 | #if @GNULIB_STRPBRK@ |
| 235 | # if ! @HAVE_STRPBRK@ | 404 | # if ! @HAVE_STRPBRK@ |
| 236 | extern char *strpbrk (char const *__s, char const *__accept) | 405 | _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) |
| 237 | __attribute__ ((__pure__)); | 406 | __attribute__ ((__pure__)) |
| 407 | _GL_ARG_NONNULL ((1, 2))); | ||
| 408 | # endif | ||
| 409 | /* On some systems, this function is defined as an overloaded function: | ||
| 410 | extern "C" { const char * strpbrk (const char *, const char *); } | ||
| 411 | extern "C++" { char * strpbrk (char *, const char *); } */ | ||
| 412 | _GL_CXXALIAS_SYS_CAST2 (strpbrk, | ||
| 413 | char *, (char const *__s, char const *__accept), | ||
| 414 | const char *, (char const *__s, char const *__accept)); | ||
| 415 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 416 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 417 | _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); | ||
| 418 | _GL_CXXALIASWARN1 (strpbrk, char const *, | ||
| 419 | (char const *__s, char const *__accept)); | ||
| 420 | # else | ||
| 421 | _GL_CXXALIASWARN (strpbrk); | ||
| 238 | # endif | 422 | # endif |
| 239 | # if defined GNULIB_POSIXCHECK | 423 | # if defined GNULIB_POSIXCHECK |
| 240 | /* strpbrk() assumes the second argument is a list of single-byte characters. | 424 | /* strpbrk() assumes the second argument is a list of single-byte characters. |
| @@ -242,40 +426,36 @@ extern char *strpbrk (char const *__s, char const *__accept) | |||
| 242 | locale encoding is GB18030 and one of the characters to be searched is a | 426 | locale encoding is GB18030 and one of the characters to be searched is a |
| 243 | digit. */ | 427 | digit. */ |
| 244 | # undef strpbrk | 428 | # undef strpbrk |
| 245 | # define strpbrk(s,a) \ | 429 | _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " |
| 246 | (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ | 430 | "in multibyte locales - " |
| 247 | "in multibyte locales - " \ | 431 | "use mbspbrk if you care about internationalization"); |
| 248 | "use mbspbrk if you care about internationalization"), \ | ||
| 249 | strpbrk (s, a)) | ||
| 250 | # endif | 432 | # endif |
| 251 | #elif defined GNULIB_POSIXCHECK | 433 | #elif defined GNULIB_POSIXCHECK |
| 252 | # undef strpbrk | 434 | # undef strpbrk |
| 253 | # define strpbrk(s,a) \ | 435 | # if HAVE_RAW_DECL_STRPBRK |
| 254 | (GL_LINK_WARNING ("strpbrk is unportable - " \ | 436 | _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " |
| 255 | "use gnulib module strpbrk for portability"), \ | 437 | "use gnulib module strpbrk for portability"); |
| 256 | strpbrk (s, a)) | 438 | # endif |
| 257 | #endif | 439 | #endif |
| 258 | 440 | ||
| 259 | #if defined GNULIB_POSIXCHECK | 441 | #if defined GNULIB_POSIXCHECK |
| 260 | /* strspn() assumes the second argument is a list of single-byte characters. | 442 | /* strspn() assumes the second argument is a list of single-byte characters. |
| 261 | Even in this simple case, it cannot work with multibyte strings. */ | 443 | Even in this simple case, it cannot work with multibyte strings. */ |
| 262 | # undef strspn | 444 | # undef strspn |
| 263 | # define strspn(s,a) \ | 445 | /* Assume strspn is always declared. */ |
| 264 | (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ | 446 | _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " |
| 265 | "in multibyte locales - " \ | 447 | "in multibyte locales - " |
| 266 | "use mbsspn if you care about internationalization"), \ | 448 | "use mbsspn if you care about internationalization"); |
| 267 | strspn (s, a)) | ||
| 268 | #endif | 449 | #endif |
| 269 | 450 | ||
| 270 | #if defined GNULIB_POSIXCHECK | 451 | #if defined GNULIB_POSIXCHECK |
| 271 | /* strrchr() does not work with multibyte strings if the locale encoding is | 452 | /* strrchr() does not work with multibyte strings if the locale encoding is |
| 272 | GB18030 and the character to be searched is a digit. */ | 453 | GB18030 and the character to be searched is a digit. */ |
| 273 | # undef strrchr | 454 | # undef strrchr |
| 274 | # define strrchr(s,c) \ | 455 | /* Assume strrchr is always declared. */ |
| 275 | (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ | 456 | _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " |
| 276 | "in some multibyte locales - " \ | 457 | "in some multibyte locales - " |
| 277 | "use mbsrchr if you care about internationalization"), \ | 458 | "use mbsrchr if you care about internationalization"); |
| 278 | strrchr (s, c)) | ||
| 279 | #endif | 459 | #endif |
| 280 | 460 | ||
| 281 | /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. | 461 | /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. |
| @@ -296,29 +476,51 @@ extern char *strpbrk (char const *__s, char const *__accept) | |||
| 296 | See also strtok_r(). */ | 476 | See also strtok_r(). */ |
| 297 | #if @GNULIB_STRSEP@ | 477 | #if @GNULIB_STRSEP@ |
| 298 | # if ! @HAVE_STRSEP@ | 478 | # if ! @HAVE_STRSEP@ |
| 299 | extern char *strsep (char **restrict __stringp, char const *restrict __delim); | 479 | _GL_FUNCDECL_SYS (strsep, char *, |
| 480 | (char **restrict __stringp, char const *restrict __delim) | ||
| 481 | _GL_ARG_NONNULL ((1, 2))); | ||
| 300 | # endif | 482 | # endif |
| 483 | _GL_CXXALIAS_SYS (strsep, char *, | ||
| 484 | (char **restrict __stringp, char const *restrict __delim)); | ||
| 485 | _GL_CXXALIASWARN (strsep); | ||
| 301 | # if defined GNULIB_POSIXCHECK | 486 | # if defined GNULIB_POSIXCHECK |
| 302 | # undef strsep | 487 | # undef strsep |
| 303 | # define strsep(s,d) \ | 488 | _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " |
| 304 | (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ | 489 | "in multibyte locales - " |
| 305 | "in multibyte locales - " \ | 490 | "use mbssep if you care about internationalization"); |
| 306 | "use mbssep if you care about internationalization"), \ | ||
| 307 | strsep (s, d)) | ||
| 308 | # endif | 491 | # endif |
| 309 | #elif defined GNULIB_POSIXCHECK | 492 | #elif defined GNULIB_POSIXCHECK |
| 310 | # undef strsep | 493 | # undef strsep |
| 311 | # define strsep(s,d) \ | 494 | # if HAVE_RAW_DECL_STRSEP |
| 312 | (GL_LINK_WARNING ("strsep is unportable - " \ | 495 | _GL_WARN_ON_USE (strsep, "strsep is unportable - " |
| 313 | "use gnulib module strsep for portability"), \ | 496 | "use gnulib module strsep for portability"); |
| 314 | strsep (s, d)) | 497 | # endif |
| 315 | #endif | 498 | #endif |
| 316 | 499 | ||
| 317 | #if @GNULIB_STRSTR@ | 500 | #if @GNULIB_STRSTR@ |
| 318 | # if @REPLACE_STRSTR@ | 501 | # if @REPLACE_STRSTR@ |
| 319 | # define strstr rpl_strstr | 502 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 320 | char *strstr (const char *haystack, const char *needle) | 503 | # define strstr rpl_strstr |
| 321 | __attribute__ ((__pure__)); | 504 | # endif |
| 505 | _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) | ||
| 506 | __attribute__ ((__pure__)) | ||
| 507 | _GL_ARG_NONNULL ((1, 2))); | ||
| 508 | _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); | ||
| 509 | # else | ||
| 510 | /* On some systems, this function is defined as an overloaded function: | ||
| 511 | extern "C++" { const char * strstr (const char *, const char *); } | ||
| 512 | extern "C++" { char * strstr (char *, const char *); } */ | ||
| 513 | _GL_CXXALIAS_SYS_CAST2 (strstr, | ||
| 514 | char *, (const char *haystack, const char *needle), | ||
| 515 | const char *, (const char *haystack, const char *needle)); | ||
| 516 | # endif | ||
| 517 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | ||
| 518 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
| 519 | _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); | ||
| 520 | _GL_CXXALIASWARN1 (strstr, const char *, | ||
| 521 | (const char *haystack, const char *needle)); | ||
| 522 | # else | ||
| 523 | _GL_CXXALIASWARN (strstr); | ||
| 322 | # endif | 524 | # endif |
| 323 | #elif defined GNULIB_POSIXCHECK | 525 | #elif defined GNULIB_POSIXCHECK |
| 324 | /* strstr() does not work with multibyte strings if the locale encoding is | 526 | /* strstr() does not work with multibyte strings if the locale encoding is |
| @@ -326,48 +528,70 @@ char *strstr (const char *haystack, const char *needle) | |||
| 326 | POSIX says that it operates on "strings", and "string" in POSIX is defined | 528 | POSIX says that it operates on "strings", and "string" in POSIX is defined |
| 327 | as a sequence of bytes, not of characters. */ | 529 | as a sequence of bytes, not of characters. */ |
| 328 | # undef strstr | 530 | # undef strstr |
| 329 | # define strstr(a,b) \ | 531 | /* Assume strstr is always declared. */ |
| 330 | (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ | 532 | _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " |
| 331 | "work correctly on character strings in most " \ | 533 | "work correctly on character strings in most " |
| 332 | "multibyte locales - " \ | 534 | "multibyte locales - " |
| 333 | "use mbsstr if you care about internationalization, " \ | 535 | "use mbsstr if you care about internationalization, " |
| 334 | "or use strstr if you care about speed"), \ | 536 | "or use strstr if you care about speed"); |
| 335 | strstr (a, b)) | ||
| 336 | #endif | 537 | #endif |
| 337 | 538 | ||
| 338 | /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive | 539 | /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive |
| 339 | comparison. */ | 540 | comparison. */ |
| 340 | #if @GNULIB_STRCASESTR@ | 541 | #if @GNULIB_STRCASESTR@ |
| 341 | # if @REPLACE_STRCASESTR@ | 542 | # if @REPLACE_STRCASESTR@ |
| 342 | # define strcasestr rpl_strcasestr | 543 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 544 | # define strcasestr rpl_strcasestr | ||
| 545 | # endif | ||
| 546 | _GL_FUNCDECL_RPL (strcasestr, char *, | ||
| 547 | (const char *haystack, const char *needle) | ||
| 548 | __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2))); | ||
| 549 | _GL_CXXALIAS_RPL (strcasestr, char *, | ||
| 550 | (const char *haystack, const char *needle)); | ||
| 551 | # else | ||
| 552 | # if ! @HAVE_STRCASESTR@ | ||
| 553 | _GL_FUNCDECL_SYS (strcasestr, char *, | ||
| 554 | (const char *haystack, const char *needle) | ||
| 555 | __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2))); | ||
| 556 | # endif | ||
| 557 | /* On some systems, this function is defined as an overloaded function: | ||
| 558 | extern "C++" { const char * strcasestr (const char *, const char *); } | ||
| 559 | extern "C++" { char * strcasestr (char *, const char *); } */ | ||
| 560 | _GL_CXXALIAS_SYS_CAST2 (strcasestr, | ||
| 561 | char *, (const char *haystack, const char *needle), | ||
| 562 | const char *, (const char *haystack, const char *needle)); | ||
| 343 | # endif | 563 | # endif |
| 344 | # if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ | 564 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ |
| 345 | extern char *strcasestr (const char *haystack, const char *needle) | 565 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
| 346 | __attribute__ ((__pure__)); | 566 | _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); |
| 567 | _GL_CXXALIASWARN1 (strcasestr, const char *, | ||
| 568 | (const char *haystack, const char *needle)); | ||
| 569 | # else | ||
| 570 | _GL_CXXALIASWARN (strcasestr); | ||
| 347 | # endif | 571 | # endif |
| 348 | #elif defined GNULIB_POSIXCHECK | 572 | #elif defined GNULIB_POSIXCHECK |
| 349 | /* strcasestr() does not work with multibyte strings: | 573 | /* strcasestr() does not work with multibyte strings: |
| 350 | It is a glibc extension, and glibc implements it only for unibyte | 574 | It is a glibc extension, and glibc implements it only for unibyte |
| 351 | locales. */ | 575 | locales. */ |
| 352 | # undef strcasestr | 576 | # undef strcasestr |
| 353 | # define strcasestr(a,b) \ | 577 | # if HAVE_RAW_DECL_STRCASESTR |
| 354 | (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ | 578 | _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " |
| 355 | "in multibyte locales - " \ | 579 | "strings in multibyte locales - " |
| 356 | "use mbscasestr if you care about " \ | 580 | "use mbscasestr if you care about " |
| 357 | "internationalization, or use c-strcasestr if you want " \ | 581 | "internationalization, or use c-strcasestr if you want " |
| 358 | "a locale independent function"), \ | 582 | "a locale independent function"); |
| 359 | strcasestr (a, b)) | 583 | # endif |
| 360 | #endif | 584 | #endif |
| 361 | 585 | ||
| 362 | /* Parse S into tokens separated by characters in DELIM. | 586 | /* Parse S into tokens separated by characters in DELIM. |
| 363 | If S is NULL, the saved pointer in SAVE_PTR is used as | 587 | If S is NULL, the saved pointer in SAVE_PTR is used as |
| 364 | the next starting point. For example: | 588 | the next starting point. For example: |
| 365 | char s[] = "-abc-=-def"; | 589 | char s[] = "-abc-=-def"; |
| 366 | char *sp; | 590 | char *sp; |
| 367 | x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" | 591 | x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" |
| 368 | x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL | 592 | x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL |
| 369 | x = strtok_r(NULL, "=", &sp); // x = NULL | 593 | x = strtok_r(NULL, "=", &sp); // x = NULL |
| 370 | // s = "abc\0-def\0" | 594 | // s = "abc\0-def\0" |
| 371 | 595 | ||
| 372 | This is a variant of strtok() that is multithread-safe. | 596 | This is a variant of strtok() that is multithread-safe. |
| 373 | 597 | ||
| @@ -382,24 +606,44 @@ extern char *strcasestr (const char *haystack, const char *needle) | |||
| 382 | 606 | ||
| 383 | See also strsep(). */ | 607 | See also strsep(). */ |
| 384 | #if @GNULIB_STRTOK_R@ | 608 | #if @GNULIB_STRTOK_R@ |
| 385 | # if ! @HAVE_DECL_STRTOK_R@ | 609 | # if @REPLACE_STRTOK_R@ |
| 386 | extern char *strtok_r (char *restrict s, char const *restrict delim, | 610 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 387 | char **restrict save_ptr); | 611 | # undef strtok_r |
| 612 | # define strtok_r rpl_strtok_r | ||
| 613 | # endif | ||
| 614 | _GL_FUNCDECL_RPL (strtok_r, char *, | ||
| 615 | (char *restrict s, char const *restrict delim, | ||
| 616 | char **restrict save_ptr) | ||
| 617 | _GL_ARG_NONNULL ((2, 3))); | ||
| 618 | _GL_CXXALIAS_RPL (strtok_r, char *, | ||
| 619 | (char *restrict s, char const *restrict delim, | ||
| 620 | char **restrict save_ptr)); | ||
| 621 | # else | ||
| 622 | # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK | ||
| 623 | # undef strtok_r | ||
| 624 | # endif | ||
| 625 | # if ! @HAVE_DECL_STRTOK_R@ | ||
| 626 | _GL_FUNCDECL_SYS (strtok_r, char *, | ||
| 627 | (char *restrict s, char const *restrict delim, | ||
| 628 | char **restrict save_ptr) | ||
| 629 | _GL_ARG_NONNULL ((2, 3))); | ||
| 630 | # endif | ||
| 631 | _GL_CXXALIAS_SYS (strtok_r, char *, | ||
| 632 | (char *restrict s, char const *restrict delim, | ||
| 633 | char **restrict save_ptr)); | ||
| 388 | # endif | 634 | # endif |
| 635 | _GL_CXXALIASWARN (strtok_r); | ||
| 389 | # if defined GNULIB_POSIXCHECK | 636 | # if defined GNULIB_POSIXCHECK |
| 390 | # undef strtok_r | 637 | _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " |
| 391 | # define strtok_r(s,d,p) \ | 638 | "strings in multibyte locales - " |
| 392 | (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ | 639 | "use mbstok_r if you care about internationalization"); |
| 393 | "in multibyte locales - " \ | ||
| 394 | "use mbstok_r if you care about internationalization"), \ | ||
| 395 | strtok_r (s, d, p)) | ||
| 396 | # endif | 640 | # endif |
| 397 | #elif defined GNULIB_POSIXCHECK | 641 | #elif defined GNULIB_POSIXCHECK |
| 398 | # undef strtok_r | 642 | # undef strtok_r |
| 399 | # define strtok_r(s,d,p) \ | 643 | # if HAVE_RAW_DECL_STRTOK_R |
| 400 | (GL_LINK_WARNING ("strtok_r is unportable - " \ | 644 | _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " |
| 401 | "use gnulib module strtok_r for portability"), \ | 645 | "use gnulib module strtok_r for portability"); |
| 402 | strtok_r (s, d, p)) | 646 | # endif |
| 403 | #endif | 647 | #endif |
| 404 | 648 | ||
| 405 | 649 | ||
| @@ -409,13 +653,27 @@ extern char *strtok_r (char *restrict s, char const *restrict delim, | |||
| 409 | #if @GNULIB_MBSLEN@ | 653 | #if @GNULIB_MBSLEN@ |
| 410 | /* Return the number of multibyte characters in the character string STRING. | 654 | /* Return the number of multibyte characters in the character string STRING. |
| 411 | This considers multibyte characters, unlike strlen, which counts bytes. */ | 655 | This considers multibyte characters, unlike strlen, which counts bytes. */ |
| 412 | extern size_t mbslen (const char *string); | 656 | # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ |
| 657 | # undef mbslen | ||
| 658 | # endif | ||
| 659 | # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ | ||
| 660 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
| 661 | # define mbslen rpl_mbslen | ||
| 662 | # endif | ||
| 663 | _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); | ||
| 664 | _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); | ||
| 665 | # else | ||
| 666 | _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); | ||
| 667 | _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); | ||
| 668 | # endif | ||
| 669 | _GL_CXXALIASWARN (mbslen); | ||
| 413 | #endif | 670 | #endif |
| 414 | 671 | ||
| 415 | #if @GNULIB_MBSNLEN@ | 672 | #if @GNULIB_MBSNLEN@ |
| 416 | /* Return the number of multibyte characters in the character string starting | 673 | /* Return the number of multibyte characters in the character string starting |
| 417 | at STRING and ending at STRING + LEN. */ | 674 | at STRING and ending at STRING + LEN. */ |
| 418 | extern size_t mbsnlen (const char *string, size_t len); | 675 | _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) |
| 676 | _GL_ARG_NONNULL ((1)); | ||
| 419 | #endif | 677 | #endif |
| 420 | 678 | ||
| 421 | #if @GNULIB_MBSCHR@ | 679 | #if @GNULIB_MBSCHR@ |
| @@ -423,8 +681,19 @@ extern size_t mbsnlen (const char *string, size_t len); | |||
| 423 | and return a pointer to it. Return NULL if C is not found in STRING. | 681 | and return a pointer to it. Return NULL if C is not found in STRING. |
| 424 | Unlike strchr(), this function works correctly in multibyte locales with | 682 | Unlike strchr(), this function works correctly in multibyte locales with |
| 425 | encodings such as GB18030. */ | 683 | encodings such as GB18030. */ |
| 426 | # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ | 684 | # if defined __hpux |
| 427 | extern char * mbschr (const char *string, int c); | 685 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 686 | # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ | ||
| 687 | # endif | ||
| 688 | _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) | ||
| 689 | _GL_ARG_NONNULL ((1))); | ||
| 690 | _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); | ||
| 691 | # else | ||
| 692 | _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) | ||
| 693 | _GL_ARG_NONNULL ((1))); | ||
| 694 | _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); | ||
| 695 | # endif | ||
| 696 | _GL_CXXALIASWARN (mbschr); | ||
| 428 | #endif | 697 | #endif |
| 429 | 698 | ||
| 430 | #if @GNULIB_MBSRCHR@ | 699 | #if @GNULIB_MBSRCHR@ |
| @@ -432,8 +701,19 @@ extern char * mbschr (const char *string, int c); | |||
| 432 | and return a pointer to it. Return NULL if C is not found in STRING. | 701 | and return a pointer to it. Return NULL if C is not found in STRING. |
| 433 | Unlike strrchr(), this function works correctly in multibyte locales with | 702 | Unlike strrchr(), this function works correctly in multibyte locales with |
| 434 | encodings such as GB18030. */ | 703 | encodings such as GB18030. */ |
| 435 | # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ | 704 | # if defined __hpux |
| 436 | extern char * mbsrchr (const char *string, int c); | 705 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 706 | # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ | ||
| 707 | # endif | ||
| 708 | _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) | ||
| 709 | _GL_ARG_NONNULL ((1))); | ||
| 710 | _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); | ||
| 711 | # else | ||
| 712 | _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) | ||
| 713 | _GL_ARG_NONNULL ((1))); | ||
| 714 | _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); | ||
| 715 | # endif | ||
| 716 | _GL_CXXALIASWARN (mbsrchr); | ||
| 437 | #endif | 717 | #endif |
| 438 | 718 | ||
| 439 | #if @GNULIB_MBSSTR@ | 719 | #if @GNULIB_MBSSTR@ |
| @@ -441,7 +721,8 @@ extern char * mbsrchr (const char *string, int c); | |||
| 441 | string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. | 721 | string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. |
| 442 | Unlike strstr(), this function works correctly in multibyte locales with | 722 | Unlike strstr(), this function works correctly in multibyte locales with |
| 443 | encodings different from UTF-8. */ | 723 | encodings different from UTF-8. */ |
| 444 | extern char * mbsstr (const char *haystack, const char *needle); | 724 | _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) |
| 725 | _GL_ARG_NONNULL ((1, 2)); | ||
| 445 | #endif | 726 | #endif |
| 446 | 727 | ||
| 447 | #if @GNULIB_MBSCASECMP@ | 728 | #if @GNULIB_MBSCASECMP@ |
| @@ -451,7 +732,8 @@ extern char * mbsstr (const char *haystack, const char *needle); | |||
| 451 | Note: This function may, in multibyte locales, return 0 for strings of | 732 | Note: This function may, in multibyte locales, return 0 for strings of |
| 452 | different lengths! | 733 | different lengths! |
| 453 | Unlike strcasecmp(), this function works correctly in multibyte locales. */ | 734 | Unlike strcasecmp(), this function works correctly in multibyte locales. */ |
| 454 | extern int mbscasecmp (const char *s1, const char *s2); | 735 | _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) |
| 736 | _GL_ARG_NONNULL ((1, 2)); | ||
| 455 | #endif | 737 | #endif |
| 456 | 738 | ||
| 457 | #if @GNULIB_MBSNCASECMP@ | 739 | #if @GNULIB_MBSNCASECMP@ |
| @@ -464,7 +746,8 @@ extern int mbscasecmp (const char *s1, const char *s2); | |||
| 464 | of different lengths! | 746 | of different lengths! |
| 465 | Unlike strncasecmp(), this function works correctly in multibyte locales. | 747 | Unlike strncasecmp(), this function works correctly in multibyte locales. |
| 466 | But beware that N is not a byte count but a character count! */ | 748 | But beware that N is not a byte count but a character count! */ |
| 467 | extern int mbsncasecmp (const char *s1, const char *s2, size_t n); | 749 | _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) |
| 750 | _GL_ARG_NONNULL ((1, 2)); | ||
| 468 | #endif | 751 | #endif |
| 469 | 752 | ||
| 470 | #if @GNULIB_MBSPCASECMP@ | 753 | #if @GNULIB_MBSPCASECMP@ |
| @@ -477,7 +760,8 @@ extern int mbsncasecmp (const char *s1, const char *s2, size_t n); | |||
| 477 | smaller length than PREFIX! | 760 | smaller length than PREFIX! |
| 478 | Unlike strncasecmp(), this function works correctly in multibyte | 761 | Unlike strncasecmp(), this function works correctly in multibyte |
| 479 | locales. */ | 762 | locales. */ |
| 480 | extern char * mbspcasecmp (const char *string, const char *prefix); | 763 | _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) |
| 764 | _GL_ARG_NONNULL ((1, 2)); | ||
| 481 | #endif | 765 | #endif |
| 482 | 766 | ||
| 483 | #if @GNULIB_MBSCASESTR@ | 767 | #if @GNULIB_MBSCASESTR@ |
| @@ -486,7 +770,8 @@ extern char * mbspcasecmp (const char *string, const char *prefix); | |||
| 486 | Note: This function may, in multibyte locales, return success even if | 770 | Note: This function may, in multibyte locales, return success even if |
| 487 | strlen (haystack) < strlen (needle) ! | 771 | strlen (haystack) < strlen (needle) ! |
| 488 | Unlike strcasestr(), this function works correctly in multibyte locales. */ | 772 | Unlike strcasestr(), this function works correctly in multibyte locales. */ |
| 489 | extern char * mbscasestr (const char *haystack, const char *needle); | 773 | _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) |
| 774 | _GL_ARG_NONNULL ((1, 2)); | ||
| 490 | #endif | 775 | #endif |
| 491 | 776 | ||
| 492 | #if @GNULIB_MBSCSPN@ | 777 | #if @GNULIB_MBSCSPN@ |
| @@ -495,7 +780,8 @@ extern char * mbscasestr (const char *haystack, const char *needle); | |||
| 495 | beginning of the string to this occurrence, or to the end of the string | 780 | beginning of the string to this occurrence, or to the end of the string |
| 496 | if none exists. | 781 | if none exists. |
| 497 | Unlike strcspn(), this function works correctly in multibyte locales. */ | 782 | Unlike strcspn(), this function works correctly in multibyte locales. */ |
| 498 | extern size_t mbscspn (const char *string, const char *accept); | 783 | _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) |
| 784 | _GL_ARG_NONNULL ((1, 2)); | ||
| 499 | #endif | 785 | #endif |
| 500 | 786 | ||
| 501 | #if @GNULIB_MBSPBRK@ | 787 | #if @GNULIB_MBSPBRK@ |
| @@ -503,8 +789,19 @@ extern size_t mbscspn (const char *string, const char *accept); | |||
| 503 | in the character string ACCEPT. Return the pointer to it, or NULL if none | 789 | in the character string ACCEPT. Return the pointer to it, or NULL if none |
| 504 | exists. | 790 | exists. |
| 505 | Unlike strpbrk(), this function works correctly in multibyte locales. */ | 791 | Unlike strpbrk(), this function works correctly in multibyte locales. */ |
| 506 | # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ | 792 | # if defined __hpux |
| 507 | extern char * mbspbrk (const char *string, const char *accept); | 793 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 794 | # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ | ||
| 795 | # endif | ||
| 796 | _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) | ||
| 797 | _GL_ARG_NONNULL ((1, 2))); | ||
| 798 | _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); | ||
| 799 | # else | ||
| 800 | _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) | ||
| 801 | _GL_ARG_NONNULL ((1, 2))); | ||
| 802 | _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); | ||
| 803 | # endif | ||
| 804 | _GL_CXXALIASWARN (mbspbrk); | ||
| 508 | #endif | 805 | #endif |
| 509 | 806 | ||
| 510 | #if @GNULIB_MBSSPN@ | 807 | #if @GNULIB_MBSSPN@ |
| @@ -513,7 +810,8 @@ extern char * mbspbrk (const char *string, const char *accept); | |||
| 513 | beginning of the string to this occurrence, or to the end of the string | 810 | beginning of the string to this occurrence, or to the end of the string |
| 514 | if none exists. | 811 | if none exists. |
| 515 | Unlike strspn(), this function works correctly in multibyte locales. */ | 812 | Unlike strspn(), this function works correctly in multibyte locales. */ |
| 516 | extern size_t mbsspn (const char *string, const char *reject); | 813 | _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) |
| 814 | _GL_ARG_NONNULL ((1, 2)); | ||
| 517 | #endif | 815 | #endif |
| 518 | 816 | ||
| 519 | #if @GNULIB_MBSSEP@ | 817 | #if @GNULIB_MBSSEP@ |
| @@ -531,7 +829,8 @@ extern size_t mbsspn (const char *string, const char *reject); | |||
| 531 | Caveat: The identity of the delimiting character is lost. | 829 | Caveat: The identity of the delimiting character is lost. |
| 532 | 830 | ||
| 533 | See also mbstok_r(). */ | 831 | See also mbstok_r(). */ |
| 534 | extern char * mbssep (char **stringp, const char *delim); | 832 | _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) |
| 833 | _GL_ARG_NONNULL ((1, 2)); | ||
| 535 | #endif | 834 | #endif |
| 536 | 835 | ||
| 537 | #if @GNULIB_MBSTOK_R@ | 836 | #if @GNULIB_MBSTOK_R@ |
| @@ -539,67 +838,81 @@ extern char * mbssep (char **stringp, const char *delim); | |||
| 539 | the character string DELIM. | 838 | the character string DELIM. |
| 540 | If STRING is NULL, the saved pointer in SAVE_PTR is used as | 839 | If STRING is NULL, the saved pointer in SAVE_PTR is used as |
| 541 | the next starting point. For example: | 840 | the next starting point. For example: |
| 542 | char s[] = "-abc-=-def"; | 841 | char s[] = "-abc-=-def"; |
| 543 | char *sp; | 842 | char *sp; |
| 544 | x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" | 843 | x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" |
| 545 | x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL | 844 | x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL |
| 546 | x = mbstok_r(NULL, "=", &sp); // x = NULL | 845 | x = mbstok_r(NULL, "=", &sp); // x = NULL |
| 547 | // s = "abc\0-def\0" | 846 | // s = "abc\0-def\0" |
| 548 | 847 | ||
| 549 | Caveat: It modifies the original string. | 848 | Caveat: It modifies the original string. |
| 550 | Caveat: These functions cannot be used on constant strings. | 849 | Caveat: These functions cannot be used on constant strings. |
| 551 | Caveat: The identity of the delimiting character is lost. | 850 | Caveat: The identity of the delimiting character is lost. |
| 552 | 851 | ||
| 553 | See also mbssep(). */ | 852 | See also mbssep(). */ |
| 554 | extern char * mbstok_r (char *string, const char *delim, char **save_ptr); | 853 | _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) |
| 854 | _GL_ARG_NONNULL ((2, 3)); | ||
| 555 | #endif | 855 | #endif |
| 556 | 856 | ||
| 557 | /* Map any int, typically from errno, into an error message. */ | 857 | /* Map any int, typically from errno, into an error message. */ |
| 558 | #if @GNULIB_STRERROR@ | 858 | #if @GNULIB_STRERROR@ |
| 559 | # if @REPLACE_STRERROR@ | 859 | # if @REPLACE_STRERROR@ |
| 560 | # undef strerror | 860 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 561 | # define strerror rpl_strerror | 861 | # undef strerror |
| 562 | extern char *strerror (int); | 862 | # define strerror rpl_strerror |
| 863 | # endif | ||
| 864 | _GL_FUNCDECL_RPL (strerror, char *, (int)); | ||
| 865 | _GL_CXXALIAS_RPL (strerror, char *, (int)); | ||
| 866 | # else | ||
| 867 | _GL_CXXALIAS_SYS (strerror, char *, (int)); | ||
| 563 | # endif | 868 | # endif |
| 869 | _GL_CXXALIASWARN (strerror); | ||
| 564 | #elif defined GNULIB_POSIXCHECK | 870 | #elif defined GNULIB_POSIXCHECK |
| 565 | # undef strerror | 871 | # undef strerror |
| 566 | # define strerror(e) \ | 872 | /* Assume strerror is always declared. */ |
| 567 | (GL_LINK_WARNING ("strerror is unportable - " \ | 873 | _GL_WARN_ON_USE (strerror, "strerror is unportable - " |
| 568 | "use gnulib module strerror to guarantee non-NULL result"), \ | 874 | "use gnulib module strerror to guarantee non-NULL result"); |
| 569 | strerror (e)) | ||
| 570 | #endif | 875 | #endif |
| 571 | 876 | ||
| 572 | #if @GNULIB_STRSIGNAL@ | 877 | #if @GNULIB_STRSIGNAL@ |
| 573 | # if @REPLACE_STRSIGNAL@ | 878 | # if @REPLACE_STRSIGNAL@ |
| 574 | # define strsignal rpl_strsignal | 879 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
| 575 | # endif | 880 | # define strsignal rpl_strsignal |
| 576 | # if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ | 881 | # endif |
| 577 | extern char *strsignal (int __sig); | 882 | _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); |
| 883 | _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); | ||
| 884 | # else | ||
| 885 | # if ! @HAVE_DECL_STRSIGNAL@ | ||
| 886 | _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); | ||
| 887 | # endif | ||
| 888 | /* Need to cast, because on Cygwin 1.5.x systems, the return type is | ||
| 889 | 'const char *'. */ | ||
| 890 | _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); | ||
| 578 | # endif | 891 | # endif |
| 892 | _GL_CXXALIASWARN (strsignal); | ||
| 579 | #elif defined GNULIB_POSIXCHECK | 893 | #elif defined GNULIB_POSIXCHECK |
| 580 | # undef strsignal | 894 | # undef strsignal |
| 581 | # define strsignal(a) \ | 895 | # if HAVE_RAW_DECL_STRSIGNAL |
| 582 | (GL_LINK_WARNING ("strsignal is unportable - " \ | 896 | _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " |
| 583 | "use gnulib module strsignal for portability"), \ | 897 | "use gnulib module strsignal for portability"); |
| 584 | strsignal (a)) | 898 | # endif |
| 585 | #endif | 899 | #endif |
| 586 | 900 | ||
| 587 | #if @GNULIB_STRVERSCMP@ | 901 | #if @GNULIB_STRVERSCMP@ |
| 588 | # if !@HAVE_STRVERSCMP@ | 902 | # if !@HAVE_STRVERSCMP@ |
| 589 | extern int strverscmp (const char *, const char *); | 903 | _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) |
| 904 | _GL_ARG_NONNULL ((1, 2))); | ||
| 590 | # endif | 905 | # endif |
| 906 | _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); | ||
| 907 | _GL_CXXALIASWARN (strverscmp); | ||
| 591 | #elif defined GNULIB_POSIXCHECK | 908 | #elif defined GNULIB_POSIXCHECK |
| 592 | # undef strverscmp | 909 | # undef strverscmp |
| 593 | # define strverscmp(a, b) \ | 910 | # if HAVE_RAW_DECL_STRVERSCMP |
| 594 | (GL_LINK_WARNING ("strverscmp is unportable - " \ | 911 | _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " |
| 595 | "use gnulib module strverscmp for portability"), \ | 912 | "use gnulib module strverscmp for portability"); |
| 596 | strverscmp (a, b)) | 913 | # endif |
| 597 | #endif | 914 | #endif |
| 598 | 915 | ||
| 599 | 916 | ||
| 600 | #ifdef __cplusplus | ||
| 601 | } | ||
| 602 | #endif | ||
| 603 | |||
| 604 | #endif /* _GL_STRING_H */ | 917 | #endif /* _GL_STRING_H */ |
| 605 | #endif /* _GL_STRING_H */ | 918 | #endif /* _GL_STRING_H */ |
