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 */ |