deprecated eval-when situations
[bpt/guile.git] / lib / string.in.h
CommitLineData
24d56127
LC
1/* A GNU-like <string.h>.
2
5e69ceb7 3 Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
24d56127
LC
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
005de2e8 16 along with this program; if not, see <http://www.gnu.org/licenses/>. */
24d56127 17
3d458a81 18#ifndef _@GUARD_PREFIX@_STRING_H
24d56127
LC
19
20#if __GNUC__ >= 3
21@PRAGMA_SYSTEM_HEADER@
22#endif
0f00f2c3 23@PRAGMA_COLUMNS@
24d56127
LC
24
25/* The include_next requires a split double-inclusion guard. */
26#@INCLUDE_NEXT@ @NEXT_STRING_H@
27
3d458a81
AW
28#ifndef _@GUARD_PREFIX@_STRING_H
29#define _@GUARD_PREFIX@_STRING_H
24d56127 30
8912421c
LC
31/* NetBSD 5.0 mis-defines NULL. */
32#include <stddef.h>
24d56127 33
61cd9dc9
LC
34/* MirBSD defines mbslen as a macro. */
35#if @GNULIB_MBSLEN@ && defined __MirBSD__
36# include <wchar.h>
37#endif
38
49114fd4
LC
39/* The __attribute__ feature is available in gcc versions 2.5 and later.
40 The attribute __pure__ was added in gcc 2.96. */
9157d901
LC
41#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
42# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
43#else
44# define _GL_ATTRIBUTE_PURE /* empty */
24d56127
LC
45#endif
46
0f00f2c3
LC
47/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */
48/* But in any case avoid namespace pollution on glibc systems. */
49#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
50 && ! defined __GLIBC__
51# include <unistd.h>
52#endif
24d56127 53
f4c79b3c
LC
54/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
55
1cd4fffc
LC
56/* The definition of _GL_ARG_NONNULL is copied here. */
57
61cd9dc9
LC
58/* The definition of _GL_WARN_ON_USE is copied here. */
59
24d56127 60
35428fb6
LC
61/* Find the index of the least-significant set bit. */
62#if @GNULIB_FFSL@
63# if !@HAVE_FFSL@
64_GL_FUNCDECL_SYS (ffsl, int, (long int i));
65# endif
66_GL_CXXALIAS_SYS (ffsl, int, (long int i));
67_GL_CXXALIASWARN (ffsl);
68#elif defined GNULIB_POSIXCHECK
69# undef ffsl
70# if HAVE_RAW_DECL_FFSL
71_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
72# endif
73#endif
74
75
76/* Find the index of the least-significant set bit. */
77#if @GNULIB_FFSLL@
78# if !@HAVE_FFSLL@
79_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
80# endif
81_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
82_GL_CXXALIASWARN (ffsll);
83#elif defined GNULIB_POSIXCHECK
84# undef ffsll
85# if HAVE_RAW_DECL_FFSLL
86_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
87# endif
88#endif
89
90
ffca4c22
AW
91/* Return the first instance of C within N bytes of S, or NULL. */
92#if @GNULIB_MEMCHR@
93# if @REPLACE_MEMCHR@
f4c79b3c
LC
94# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
95# define memchr rpl_memchr
96# endif
97_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
9157d901 98 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
99 _GL_ARG_NONNULL ((1)));
100_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
101# else
a927b6c1
LC
102# if ! @HAVE_MEMCHR@
103_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
9157d901 104 _GL_ATTRIBUTE_PURE
a927b6c1
LC
105 _GL_ARG_NONNULL ((1)));
106# endif
f4c79b3c
LC
107 /* On some systems, this function is defined as an overloaded function:
108 extern "C" { const void * std::memchr (const void *, int, size_t); }
109 extern "C++" { void * std::memchr (void *, int, size_t); } */
110_GL_CXXALIAS_SYS_CAST2 (memchr,
111 void *, (void const *__s, int __c, size_t __n),
112 void const *, (void const *__s, int __c, size_t __n));
113# endif
0f00f2c3 114# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
115 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
116_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
117_GL_CXXALIASWARN1 (memchr, void const *,
118 (void const *__s, int __c, size_t __n));
119# else
120_GL_CXXALIASWARN (memchr);
ffca4c22
AW
121# endif
122#elif defined GNULIB_POSIXCHECK
123# undef memchr
61cd9dc9
LC
124/* Assume memchr is always declared. */
125_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
126 "use gnulib module memchr for portability" );
ffca4c22
AW
127#endif
128
24d56127
LC
129/* Return the first occurrence of NEEDLE in HAYSTACK. */
130#if @GNULIB_MEMMEM@
131# if @REPLACE_MEMMEM@
f4c79b3c
LC
132# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
133# define memmem rpl_memmem
134# endif
135_GL_FUNCDECL_RPL (memmem, void *,
136 (void const *__haystack, size_t __haystack_len,
137 void const *__needle, size_t __needle_len)
9157d901
LC
138 _GL_ATTRIBUTE_PURE
139 _GL_ARG_NONNULL ((1, 3)));
f4c79b3c
LC
140_GL_CXXALIAS_RPL (memmem, void *,
141 (void const *__haystack, size_t __haystack_len,
142 void const *__needle, size_t __needle_len));
143# else
144# if ! @HAVE_DECL_MEMMEM@
145_GL_FUNCDECL_SYS (memmem, void *,
146 (void const *__haystack, size_t __haystack_len,
147 void const *__needle, size_t __needle_len)
9157d901
LC
148 _GL_ATTRIBUTE_PURE
149 _GL_ARG_NONNULL ((1, 3)));
f4c79b3c
LC
150# endif
151_GL_CXXALIAS_SYS (memmem, void *,
152 (void const *__haystack, size_t __haystack_len,
153 void const *__needle, size_t __needle_len));
154# endif
155_GL_CXXALIASWARN (memmem);
24d56127
LC
156#elif defined GNULIB_POSIXCHECK
157# undef memmem
61cd9dc9
LC
158# if HAVE_RAW_DECL_MEMMEM
159_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
160 "use gnulib module memmem-simple for portability, "
161 "and module memmem for speed" );
162# endif
24d56127
LC
163#endif
164
165/* Copy N bytes of SRC to DEST, return pointer to bytes after the
166 last written byte. */
167#if @GNULIB_MEMPCPY@
168# if ! @HAVE_MEMPCPY@
f4c79b3c
LC
169_GL_FUNCDECL_SYS (mempcpy, void *,
170 (void *restrict __dest, void const *restrict __src,
171 size_t __n)
172 _GL_ARG_NONNULL ((1, 2)));
173# endif
174_GL_CXXALIAS_SYS (mempcpy, void *,
175 (void *restrict __dest, void const *restrict __src,
176 size_t __n));
177_GL_CXXALIASWARN (mempcpy);
24d56127
LC
178#elif defined GNULIB_POSIXCHECK
179# undef mempcpy
61cd9dc9
LC
180# if HAVE_RAW_DECL_MEMPCPY
181_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
182 "use gnulib module mempcpy for portability");
183# endif
24d56127
LC
184#endif
185
186/* Search backwards through a block for a byte (specified as an int). */
187#if @GNULIB_MEMRCHR@
188# if ! @HAVE_DECL_MEMRCHR@
f4c79b3c 189_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
9157d901 190 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
191 _GL_ARG_NONNULL ((1)));
192# endif
193 /* On some systems, this function is defined as an overloaded function:
194 extern "C++" { const void * std::memrchr (const void *, int, size_t); }
195 extern "C++" { void * std::memrchr (void *, int, size_t); } */
196_GL_CXXALIAS_SYS_CAST2 (memrchr,
197 void *, (void const *, int, size_t),
198 void const *, (void const *, int, size_t));
0f00f2c3 199# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
200 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
201_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
202_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
203# else
204_GL_CXXALIASWARN (memrchr);
24d56127
LC
205# endif
206#elif defined GNULIB_POSIXCHECK
207# undef memrchr
61cd9dc9
LC
208# if HAVE_RAW_DECL_MEMRCHR
209_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
210 "use gnulib module memrchr for portability");
211# endif
24d56127
LC
212#endif
213
214/* Find the first occurrence of C in S. More efficient than
215 memchr(S,C,N), at the expense of undefined behavior if C does not
216 occur within N bytes. */
217#if @GNULIB_RAWMEMCHR@
218# if ! @HAVE_RAWMEMCHR@
f4c79b3c 219_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
9157d901 220 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
221 _GL_ARG_NONNULL ((1)));
222# endif
223 /* On some systems, this function is defined as an overloaded function:
224 extern "C++" { const void * std::rawmemchr (const void *, int); }
225 extern "C++" { void * std::rawmemchr (void *, int); } */
226_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
227 void *, (void const *__s, int __c_in),
228 void const *, (void const *__s, int __c_in));
0f00f2c3 229# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
230 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
231_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
232_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
233# else
234_GL_CXXALIASWARN (rawmemchr);
24d56127
LC
235# endif
236#elif defined GNULIB_POSIXCHECK
237# undef rawmemchr
61cd9dc9
LC
238# if HAVE_RAW_DECL_RAWMEMCHR
239_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
240 "use gnulib module rawmemchr for portability");
241# endif
24d56127
LC
242#endif
243
244/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
245#if @GNULIB_STPCPY@
246# if ! @HAVE_STPCPY@
f4c79b3c
LC
247_GL_FUNCDECL_SYS (stpcpy, char *,
248 (char *restrict __dst, char const *restrict __src)
249 _GL_ARG_NONNULL ((1, 2)));
24d56127 250# endif
f4c79b3c
LC
251_GL_CXXALIAS_SYS (stpcpy, char *,
252 (char *restrict __dst, char const *restrict __src));
253_GL_CXXALIASWARN (stpcpy);
24d56127
LC
254#elif defined GNULIB_POSIXCHECK
255# undef stpcpy
61cd9dc9
LC
256# if HAVE_RAW_DECL_STPCPY
257_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
258 "use gnulib module stpcpy for portability");
259# endif
24d56127
LC
260#endif
261
262/* Copy no more than N bytes of SRC to DST, returning a pointer past the
263 last non-NUL byte written into DST. */
264#if @GNULIB_STPNCPY@
a927b6c1 265# if @REPLACE_STPNCPY@
f4c79b3c 266# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
9157d901 267# undef stpncpy
f4c79b3c
LC
268# define stpncpy rpl_stpncpy
269# endif
270_GL_FUNCDECL_RPL (stpncpy, char *,
271 (char *restrict __dst, char const *restrict __src,
272 size_t __n)
273 _GL_ARG_NONNULL ((1, 2)));
274_GL_CXXALIAS_RPL (stpncpy, char *,
275 (char *restrict __dst, char const *restrict __src,
276 size_t __n));
277# else
a927b6c1
LC
278# if ! @HAVE_STPNCPY@
279_GL_FUNCDECL_SYS (stpncpy, char *,
280 (char *restrict __dst, char const *restrict __src,
281 size_t __n)
282 _GL_ARG_NONNULL ((1, 2)));
283# endif
f4c79b3c
LC
284_GL_CXXALIAS_SYS (stpncpy, char *,
285 (char *restrict __dst, char const *restrict __src,
286 size_t __n));
287# endif
288_GL_CXXALIASWARN (stpncpy);
24d56127
LC
289#elif defined GNULIB_POSIXCHECK
290# undef stpncpy
61cd9dc9
LC
291# if HAVE_RAW_DECL_STPNCPY
292_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
293 "use gnulib module stpncpy for portability");
294# endif
24d56127
LC
295#endif
296
297#if defined GNULIB_POSIXCHECK
298/* strchr() does not work with multibyte strings if the locale encoding is
299 GB18030 and the character to be searched is a digit. */
300# undef strchr
61cd9dc9
LC
301/* Assume strchr is always declared. */
302_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
303 "in some multibyte locales - "
304 "use mbschr if you care about internationalization");
24d56127
LC
305#endif
306
307/* Find the first occurrence of C in S or the final NUL byte. */
308#if @GNULIB_STRCHRNUL@
dd7d0148
LC
309# if @REPLACE_STRCHRNUL@
310# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
311# define strchrnul rpl_strchrnul
312# endif
313_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
314 _GL_ATTRIBUTE_PURE
315 _GL_ARG_NONNULL ((1)));
316_GL_CXXALIAS_RPL (strchrnul, char *,
317 (const char *str, int ch));
318# else
319# if ! @HAVE_STRCHRNUL@
f4c79b3c 320_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
9157d901 321 _GL_ATTRIBUTE_PURE
f4c79b3c 322 _GL_ARG_NONNULL ((1)));
dd7d0148 323# endif
f4c79b3c
LC
324 /* On some systems, this function is defined as an overloaded function:
325 extern "C++" { const char * std::strchrnul (const char *, int); }
326 extern "C++" { char * std::strchrnul (char *, int); } */
327_GL_CXXALIAS_SYS_CAST2 (strchrnul,
328 char *, (char const *__s, int __c_in),
329 char const *, (char const *__s, int __c_in));
dd7d0148 330# endif
0f00f2c3 331# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
332 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
333_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
334_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
335# else
336_GL_CXXALIASWARN (strchrnul);
24d56127
LC
337# endif
338#elif defined GNULIB_POSIXCHECK
339# undef strchrnul
61cd9dc9
LC
340# if HAVE_RAW_DECL_STRCHRNUL
341_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
342 "use gnulib module strchrnul for portability");
343# endif
24d56127
LC
344#endif
345
346/* Duplicate S, returning an identical malloc'd string. */
347#if @GNULIB_STRDUP@
348# if @REPLACE_STRDUP@
f4c79b3c
LC
349# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
350# undef strdup
351# define strdup rpl_strdup
352# endif
353_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
354_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
355# else
9157d901
LC
356# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
357 /* strdup exists as a function and as a macro. Get rid of the macro. */
358# undef strdup
359# endif
f4c79b3c
LC
360# if !(@HAVE_DECL_STRDUP@ || defined strdup)
361_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
362# endif
363_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
364# endif
365_GL_CXXALIASWARN (strdup);
24d56127
LC
366#elif defined GNULIB_POSIXCHECK
367# undef strdup
61cd9dc9
LC
368# if HAVE_RAW_DECL_STRDUP
369_GL_WARN_ON_USE (strdup, "strdup is unportable - "
370 "use gnulib module strdup for portability");
371# endif
24d56127
LC
372#endif
373
a927b6c1
LC
374/* Append no more than N characters from SRC onto DEST. */
375#if @GNULIB_STRNCAT@
376# if @REPLACE_STRNCAT@
377# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
378# undef strncat
379# define strncat rpl_strncat
380# endif
381_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
382 _GL_ARG_NONNULL ((1, 2)));
383_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
384# else
385_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
386# endif
387_GL_CXXALIASWARN (strncat);
388#elif defined GNULIB_POSIXCHECK
389# undef strncat
390# if HAVE_RAW_DECL_STRNCAT
391_GL_WARN_ON_USE (strncat, "strncat is unportable - "
392 "use gnulib module strncat for portability");
393# endif
394#endif
395
24d56127
LC
396/* Return a newly allocated copy of at most N bytes of STRING. */
397#if @GNULIB_STRNDUP@
8912421c 398# if @REPLACE_STRNDUP@
f4c79b3c
LC
399# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
400# undef strndup
401# define strndup rpl_strndup
402# endif
403_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
404 _GL_ARG_NONNULL ((1)));
405_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
406# else
407# if ! @HAVE_DECL_STRNDUP@
408_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
409 _GL_ARG_NONNULL ((1)));
410# endif
411_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
412# endif
413_GL_CXXALIASWARN (strndup);
24d56127
LC
414#elif defined GNULIB_POSIXCHECK
415# undef strndup
61cd9dc9
LC
416# if HAVE_RAW_DECL_STRNDUP
417_GL_WARN_ON_USE (strndup, "strndup is unportable - "
418 "use gnulib module strndup for portability");
419# endif
24d56127
LC
420#endif
421
422/* Find the length (number of bytes) of STRING, but scan at most
423 MAXLEN bytes. If no '\0' terminator is found in that many bytes,
424 return MAXLEN. */
425#if @GNULIB_STRNLEN@
a927b6c1
LC
426# if @REPLACE_STRNLEN@
427# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
428# undef strnlen
429# define strnlen rpl_strnlen
430# endif
431_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
9157d901 432 _GL_ATTRIBUTE_PURE
a927b6c1
LC
433 _GL_ARG_NONNULL ((1)));
434_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
435# else
436# if ! @HAVE_DECL_STRNLEN@
f4c79b3c 437_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
9157d901 438 _GL_ATTRIBUTE_PURE
f4c79b3c 439 _GL_ARG_NONNULL ((1)));
a927b6c1 440# endif
f4c79b3c 441_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
a927b6c1 442# endif
f4c79b3c 443_GL_CXXALIASWARN (strnlen);
24d56127
LC
444#elif defined GNULIB_POSIXCHECK
445# undef strnlen
61cd9dc9
LC
446# if HAVE_RAW_DECL_STRNLEN
447_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
448 "use gnulib module strnlen for portability");
449# endif
24d56127
LC
450#endif
451
452#if defined GNULIB_POSIXCHECK
453/* strcspn() assumes the second argument is a list of single-byte characters.
454 Even in this simple case, it does not work with multibyte strings if the
455 locale encoding is GB18030 and one of the characters to be searched is a
456 digit. */
457# undef strcspn
61cd9dc9
LC
458/* Assume strcspn is always declared. */
459_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
460 "in multibyte locales - "
461 "use mbscspn if you care about internationalization");
24d56127
LC
462#endif
463
464/* Find the first occurrence in S of any character in ACCEPT. */
465#if @GNULIB_STRPBRK@
466# if ! @HAVE_STRPBRK@
f4c79b3c 467_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
9157d901 468 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
469 _GL_ARG_NONNULL ((1, 2)));
470# endif
471 /* On some systems, this function is defined as an overloaded function:
472 extern "C" { const char * strpbrk (const char *, const char *); }
473 extern "C++" { char * strpbrk (char *, const char *); } */
474_GL_CXXALIAS_SYS_CAST2 (strpbrk,
475 char *, (char const *__s, char const *__accept),
476 const char *, (char const *__s, char const *__accept));
0f00f2c3 477# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
478 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
479_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
480_GL_CXXALIASWARN1 (strpbrk, char const *,
481 (char const *__s, char const *__accept));
482# else
483_GL_CXXALIASWARN (strpbrk);
24d56127
LC
484# endif
485# if defined GNULIB_POSIXCHECK
486/* strpbrk() assumes the second argument is a list of single-byte characters.
487 Even in this simple case, it does not work with multibyte strings if the
488 locale encoding is GB18030 and one of the characters to be searched is a
489 digit. */
490# undef strpbrk
61cd9dc9
LC
491_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
492 "in multibyte locales - "
493 "use mbspbrk if you care about internationalization");
24d56127
LC
494# endif
495#elif defined GNULIB_POSIXCHECK
496# undef strpbrk
61cd9dc9
LC
497# if HAVE_RAW_DECL_STRPBRK
498_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
499 "use gnulib module strpbrk for portability");
500# endif
24d56127
LC
501#endif
502
503#if defined GNULIB_POSIXCHECK
504/* strspn() assumes the second argument is a list of single-byte characters.
505 Even in this simple case, it cannot work with multibyte strings. */
506# undef strspn
61cd9dc9
LC
507/* Assume strspn is always declared. */
508_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
509 "in multibyte locales - "
510 "use mbsspn if you care about internationalization");
24d56127
LC
511#endif
512
513#if defined GNULIB_POSIXCHECK
514/* strrchr() does not work with multibyte strings if the locale encoding is
515 GB18030 and the character to be searched is a digit. */
516# undef strrchr
61cd9dc9
LC
517/* Assume strrchr is always declared. */
518_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
519 "in some multibyte locales - "
520 "use mbsrchr if you care about internationalization");
24d56127
LC
521#endif
522
523/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
524 If one is found, overwrite it with a NUL, and advance *STRINGP
525 to point to the next char after it. Otherwise, set *STRINGP to NULL.
526 If *STRINGP was already NULL, nothing happens.
527 Return the old value of *STRINGP.
528
529 This is a variant of strtok() that is multithread-safe and supports
530 empty fields.
531
532 Caveat: It modifies the original string.
533 Caveat: These functions cannot be used on constant strings.
534 Caveat: The identity of the delimiting character is lost.
535 Caveat: It doesn't work with multibyte strings unless all of the delimiter
536 characters are ASCII characters < 0x30.
537
538 See also strtok_r(). */
539#if @GNULIB_STRSEP@
540# if ! @HAVE_STRSEP@
f4c79b3c
LC
541_GL_FUNCDECL_SYS (strsep, char *,
542 (char **restrict __stringp, char const *restrict __delim)
543 _GL_ARG_NONNULL ((1, 2)));
24d56127 544# endif
f4c79b3c
LC
545_GL_CXXALIAS_SYS (strsep, char *,
546 (char **restrict __stringp, char const *restrict __delim));
547_GL_CXXALIASWARN (strsep);
24d56127
LC
548# if defined GNULIB_POSIXCHECK
549# undef strsep
61cd9dc9
LC
550_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
551 "in multibyte locales - "
552 "use mbssep if you care about internationalization");
24d56127
LC
553# endif
554#elif defined GNULIB_POSIXCHECK
555# undef strsep
61cd9dc9
LC
556# if HAVE_RAW_DECL_STRSEP
557_GL_WARN_ON_USE (strsep, "strsep is unportable - "
558 "use gnulib module strsep for portability");
559# endif
24d56127
LC
560#endif
561
562#if @GNULIB_STRSTR@
563# if @REPLACE_STRSTR@
f4c79b3c
LC
564# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
565# define strstr rpl_strstr
566# endif
567_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
9157d901 568 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
569 _GL_ARG_NONNULL ((1, 2)));
570_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
571# else
572 /* On some systems, this function is defined as an overloaded function:
573 extern "C++" { const char * strstr (const char *, const char *); }
574 extern "C++" { char * strstr (char *, const char *); } */
575_GL_CXXALIAS_SYS_CAST2 (strstr,
576 char *, (const char *haystack, const char *needle),
577 const char *, (const char *haystack, const char *needle));
578# endif
0f00f2c3 579# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
580 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
581_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
582_GL_CXXALIASWARN1 (strstr, const char *,
583 (const char *haystack, const char *needle));
584# else
585_GL_CXXALIASWARN (strstr);
24d56127
LC
586# endif
587#elif defined GNULIB_POSIXCHECK
588/* strstr() does not work with multibyte strings if the locale encoding is
589 different from UTF-8:
590 POSIX says that it operates on "strings", and "string" in POSIX is defined
591 as a sequence of bytes, not of characters. */
592# undef strstr
61cd9dc9
LC
593/* Assume strstr is always declared. */
594_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
595 "work correctly on character strings in most "
596 "multibyte locales - "
597 "use mbsstr if you care about internationalization, "
598 "or use strstr if you care about speed");
24d56127
LC
599#endif
600
601/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
602 comparison. */
603#if @GNULIB_STRCASESTR@
604# if @REPLACE_STRCASESTR@
f4c79b3c
LC
605# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
606# define strcasestr rpl_strcasestr
607# endif
608_GL_FUNCDECL_RPL (strcasestr, char *,
609 (const char *haystack, const char *needle)
9157d901
LC
610 _GL_ATTRIBUTE_PURE
611 _GL_ARG_NONNULL ((1, 2)));
f4c79b3c
LC
612_GL_CXXALIAS_RPL (strcasestr, char *,
613 (const char *haystack, const char *needle));
614# else
615# if ! @HAVE_STRCASESTR@
616_GL_FUNCDECL_SYS (strcasestr, char *,
617 (const char *haystack, const char *needle)
9157d901
LC
618 _GL_ATTRIBUTE_PURE
619 _GL_ARG_NONNULL ((1, 2)));
f4c79b3c
LC
620# endif
621 /* On some systems, this function is defined as an overloaded function:
622 extern "C++" { const char * strcasestr (const char *, const char *); }
623 extern "C++" { char * strcasestr (char *, const char *); } */
624_GL_CXXALIAS_SYS_CAST2 (strcasestr,
625 char *, (const char *haystack, const char *needle),
626 const char *, (const char *haystack, const char *needle));
627# endif
0f00f2c3 628# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
f4c79b3c
LC
629 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
630_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
631_GL_CXXALIASWARN1 (strcasestr, const char *,
632 (const char *haystack, const char *needle));
633# else
634_GL_CXXALIASWARN (strcasestr);
24d56127
LC
635# endif
636#elif defined GNULIB_POSIXCHECK
637/* strcasestr() does not work with multibyte strings:
638 It is a glibc extension, and glibc implements it only for unibyte
639 locales. */
640# undef strcasestr
61cd9dc9
LC
641# if HAVE_RAW_DECL_STRCASESTR
642_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
643 "strings in multibyte locales - "
644 "use mbscasestr if you care about "
645 "internationalization, or use c-strcasestr if you want "
646 "a locale independent function");
647# endif
24d56127
LC
648#endif
649
650/* Parse S into tokens separated by characters in DELIM.
651 If S is NULL, the saved pointer in SAVE_PTR is used as
652 the next starting point. For example:
1cd4fffc
LC
653 char s[] = "-abc-=-def";
654 char *sp;
655 x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
656 x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
657 x = strtok_r(NULL, "=", &sp); // x = NULL
658 // s = "abc\0-def\0"
24d56127
LC
659
660 This is a variant of strtok() that is multithread-safe.
661
662 For the POSIX documentation for this function, see:
663 http://www.opengroup.org/susv3xsh/strtok.html
664
665 Caveat: It modifies the original string.
666 Caveat: These functions cannot be used on constant strings.
667 Caveat: The identity of the delimiting character is lost.
668 Caveat: It doesn't work with multibyte strings unless all of the delimiter
669 characters are ASCII characters < 0x30.
670
671 See also strsep(). */
672#if @GNULIB_STRTOK_R@
8912421c 673# if @REPLACE_STRTOK_R@
f4c79b3c
LC
674# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
675# undef strtok_r
676# define strtok_r rpl_strtok_r
677# endif
678_GL_FUNCDECL_RPL (strtok_r, char *,
679 (char *restrict s, char const *restrict delim,
680 char **restrict save_ptr)
681 _GL_ARG_NONNULL ((2, 3)));
682_GL_CXXALIAS_RPL (strtok_r, char *,
683 (char *restrict s, char const *restrict delim,
684 char **restrict save_ptr));
685# else
686# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
687# undef strtok_r
688# endif
689# if ! @HAVE_DECL_STRTOK_R@
690_GL_FUNCDECL_SYS (strtok_r, char *,
691 (char *restrict s, char const *restrict delim,
692 char **restrict save_ptr)
693 _GL_ARG_NONNULL ((2, 3)));
694# endif
695_GL_CXXALIAS_SYS (strtok_r, char *,
696 (char *restrict s, char const *restrict delim,
697 char **restrict save_ptr));
698# endif
699_GL_CXXALIASWARN (strtok_r);
24d56127 700# if defined GNULIB_POSIXCHECK
61cd9dc9
LC
701_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
702 "strings in multibyte locales - "
703 "use mbstok_r if you care about internationalization");
24d56127
LC
704# endif
705#elif defined GNULIB_POSIXCHECK
706# undef strtok_r
61cd9dc9
LC
707# if HAVE_RAW_DECL_STRTOK_R
708_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
709 "use gnulib module strtok_r for portability");
710# endif
24d56127
LC
711#endif
712
713
714/* The following functions are not specified by POSIX. They are gnulib
715 extensions. */
716
717#if @GNULIB_MBSLEN@
718/* Return the number of multibyte characters in the character string STRING.
719 This considers multibyte characters, unlike strlen, which counts bytes. */
61cd9dc9
LC
720# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */
721# undef mbslen
722# endif
723# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */
f4c79b3c
LC
724# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
725# define mbslen rpl_mbslen
726# endif
005de2e8
LC
727_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
728 _GL_ATTRIBUTE_PURE
729 _GL_ARG_NONNULL ((1)));
f4c79b3c
LC
730_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
731# else
005de2e8
LC
732_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
733 _GL_ATTRIBUTE_PURE
734 _GL_ARG_NONNULL ((1)));
f4c79b3c 735_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
61cd9dc9 736# endif
f4c79b3c 737_GL_CXXALIASWARN (mbslen);
24d56127
LC
738#endif
739
740#if @GNULIB_MBSNLEN@
741/* Return the number of multibyte characters in the character string starting
742 at STRING and ending at STRING + LEN. */
f4c79b3c 743_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
005de2e8 744 _GL_ATTRIBUTE_PURE
f4c79b3c 745 _GL_ARG_NONNULL ((1));
24d56127
LC
746#endif
747
748#if @GNULIB_MBSCHR@
749/* Locate the first single-byte character C in the character string STRING,
750 and return a pointer to it. Return NULL if C is not found in STRING.
751 Unlike strchr(), this function works correctly in multibyte locales with
752 encodings such as GB18030. */
f4c79b3c
LC
753# if defined __hpux
754# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
755# define mbschr rpl_mbschr /* avoid collision with HP-UX function */
756# endif
757_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
005de2e8 758 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
759 _GL_ARG_NONNULL ((1)));
760_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
761# else
762_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
005de2e8 763 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
764 _GL_ARG_NONNULL ((1)));
765_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
766# endif
767_GL_CXXALIASWARN (mbschr);
24d56127
LC
768#endif
769
770#if @GNULIB_MBSRCHR@
771/* Locate the last single-byte character C in the character string STRING,
772 and return a pointer to it. Return NULL if C is not found in STRING.
773 Unlike strrchr(), this function works correctly in multibyte locales with
774 encodings such as GB18030. */
3d458a81 775# if defined __hpux || defined __INTERIX
f4c79b3c 776# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
3d458a81 777# define mbsrchr rpl_mbsrchr /* avoid collision with system function */
f4c79b3c
LC
778# endif
779_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
005de2e8 780 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
781 _GL_ARG_NONNULL ((1)));
782_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
783# else
784_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
005de2e8 785 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
786 _GL_ARG_NONNULL ((1)));
787_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
788# endif
789_GL_CXXALIASWARN (mbsrchr);
24d56127
LC
790#endif
791
792#if @GNULIB_MBSSTR@
793/* Find the first occurrence of the character string NEEDLE in the character
794 string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK.
795 Unlike strstr(), this function works correctly in multibyte locales with
796 encodings different from UTF-8. */
f4c79b3c 797_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
005de2e8 798 _GL_ATTRIBUTE_PURE
1cd4fffc 799 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
800#endif
801
802#if @GNULIB_MBSCASECMP@
803/* Compare the character strings S1 and S2, ignoring case, returning less than,
804 equal to or greater than zero if S1 is lexicographically less than, equal to
805 or greater than S2.
806 Note: This function may, in multibyte locales, return 0 for strings of
807 different lengths!
808 Unlike strcasecmp(), this function works correctly in multibyte locales. */
f4c79b3c 809_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
005de2e8 810 _GL_ATTRIBUTE_PURE
1cd4fffc 811 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
812#endif
813
814#if @GNULIB_MBSNCASECMP@
815/* Compare the initial segment of the character string S1 consisting of at most
816 N characters with the initial segment of the character string S2 consisting
817 of at most N characters, ignoring case, returning less than, equal to or
818 greater than zero if the initial segment of S1 is lexicographically less
819 than, equal to or greater than the initial segment of S2.
820 Note: This function may, in multibyte locales, return 0 for initial segments
821 of different lengths!
822 Unlike strncasecmp(), this function works correctly in multibyte locales.
823 But beware that N is not a byte count but a character count! */
f4c79b3c 824_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
005de2e8 825 _GL_ATTRIBUTE_PURE
1cd4fffc 826 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
827#endif
828
829#if @GNULIB_MBSPCASECMP@
830/* Compare the initial segment of the character string STRING consisting of
831 at most mbslen (PREFIX) characters with the character string PREFIX,
9157d901
LC
832 ignoring case. If the two match, return a pointer to the first byte
833 after this prefix in STRING. Otherwise, return NULL.
834 Note: This function may, in multibyte locales, return non-NULL if STRING
835 is of smaller length than PREFIX!
24d56127
LC
836 Unlike strncasecmp(), this function works correctly in multibyte
837 locales. */
f4c79b3c 838_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
005de2e8 839 _GL_ATTRIBUTE_PURE
1cd4fffc 840 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
841#endif
842
843#if @GNULIB_MBSCASESTR@
844/* Find the first occurrence of the character string NEEDLE in the character
845 string HAYSTACK, using case-insensitive comparison.
846 Note: This function may, in multibyte locales, return success even if
847 strlen (haystack) < strlen (needle) !
848 Unlike strcasestr(), this function works correctly in multibyte locales. */
f4c79b3c 849_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
005de2e8 850 _GL_ATTRIBUTE_PURE
1cd4fffc 851 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
852#endif
853
854#if @GNULIB_MBSCSPN@
855/* Find the first occurrence in the character string STRING of any character
856 in the character string ACCEPT. Return the number of bytes from the
857 beginning of the string to this occurrence, or to the end of the string
858 if none exists.
859 Unlike strcspn(), this function works correctly in multibyte locales. */
f4c79b3c 860_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
005de2e8 861 _GL_ATTRIBUTE_PURE
1cd4fffc 862 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
863#endif
864
865#if @GNULIB_MBSPBRK@
866/* Find the first occurrence in the character string STRING of any character
867 in the character string ACCEPT. Return the pointer to it, or NULL if none
868 exists.
869 Unlike strpbrk(), this function works correctly in multibyte locales. */
f4c79b3c
LC
870# if defined __hpux
871# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
872# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
873# endif
874_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
005de2e8 875 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
876 _GL_ARG_NONNULL ((1, 2)));
877_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
878# else
879_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
005de2e8 880 _GL_ATTRIBUTE_PURE
f4c79b3c
LC
881 _GL_ARG_NONNULL ((1, 2)));
882_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
883# endif
884_GL_CXXALIASWARN (mbspbrk);
24d56127
LC
885#endif
886
887#if @GNULIB_MBSSPN@
888/* Find the first occurrence in the character string STRING of any character
889 not in the character string REJECT. Return the number of bytes from the
890 beginning of the string to this occurrence, or to the end of the string
891 if none exists.
892 Unlike strspn(), this function works correctly in multibyte locales. */
f4c79b3c 893_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
005de2e8 894 _GL_ATTRIBUTE_PURE
1cd4fffc 895 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
896#endif
897
898#if @GNULIB_MBSSEP@
899/* Search the next delimiter (multibyte character listed in the character
900 string DELIM) starting at the character string *STRINGP.
901 If one is found, overwrite it with a NUL, and advance *STRINGP to point
902 to the next multibyte character after it. Otherwise, set *STRINGP to NULL.
903 If *STRINGP was already NULL, nothing happens.
904 Return the old value of *STRINGP.
905
906 This is a variant of mbstok_r() that supports empty fields.
907
908 Caveat: It modifies the original string.
909 Caveat: These functions cannot be used on constant strings.
910 Caveat: The identity of the delimiting character is lost.
911
912 See also mbstok_r(). */
f4c79b3c 913_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
1cd4fffc 914 _GL_ARG_NONNULL ((1, 2));
24d56127
LC
915#endif
916
917#if @GNULIB_MBSTOK_R@
918/* Parse the character string STRING into tokens separated by characters in
919 the character string DELIM.
920 If STRING is NULL, the saved pointer in SAVE_PTR is used as
921 the next starting point. For example:
1cd4fffc
LC
922 char s[] = "-abc-=-def";
923 char *sp;
924 x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def"
925 x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL
926 x = mbstok_r(NULL, "=", &sp); // x = NULL
927 // s = "abc\0-def\0"
24d56127
LC
928
929 Caveat: It modifies the original string.
930 Caveat: These functions cannot be used on constant strings.
931 Caveat: The identity of the delimiting character is lost.
932
933 See also mbssep(). */
f4c79b3c 934_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
1cd4fffc 935 _GL_ARG_NONNULL ((2, 3));
24d56127
LC
936#endif
937
938/* Map any int, typically from errno, into an error message. */
939#if @GNULIB_STRERROR@
940# if @REPLACE_STRERROR@
f4c79b3c
LC
941# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
942# undef strerror
943# define strerror rpl_strerror
944# endif
945_GL_FUNCDECL_RPL (strerror, char *, (int));
946_GL_CXXALIAS_RPL (strerror, char *, (int));
947# else
948_GL_CXXALIAS_SYS (strerror, char *, (int));
949# endif
950_GL_CXXALIASWARN (strerror);
24d56127
LC
951#elif defined GNULIB_POSIXCHECK
952# undef strerror
61cd9dc9
LC
953/* Assume strerror is always declared. */
954_GL_WARN_ON_USE (strerror, "strerror is unportable - "
955 "use gnulib module strerror to guarantee non-NULL result");
24d56127
LC
956#endif
957
0f00f2c3
LC
958/* Map any int, typically from errno, into an error message. Multithread-safe.
959 Uses the POSIX declaration, not the glibc declaration. */
960#if @GNULIB_STRERROR_R@
961# if @REPLACE_STRERROR_R@
962# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
963# undef strerror_r
964# define strerror_r rpl_strerror_r
965# endif
966_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
967 _GL_ARG_NONNULL ((2)));
968_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
969# else
970# if !@HAVE_DECL_STRERROR_R@
971_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
972 _GL_ARG_NONNULL ((2)));
973# endif
974_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
975# endif
976# if @HAVE_DECL_STRERROR_R@
977_GL_CXXALIASWARN (strerror_r);
978# endif
979#elif defined GNULIB_POSIXCHECK
980# undef strerror_r
981# if HAVE_RAW_DECL_STRERROR_R
982_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
983 "use gnulib module strerror_r-posix for portability");
984# endif
985#endif
986
24d56127
LC
987#if @GNULIB_STRSIGNAL@
988# if @REPLACE_STRSIGNAL@
f4c79b3c
LC
989# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
990# define strsignal rpl_strsignal
991# endif
992_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
993_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
994# else
995# if ! @HAVE_DECL_STRSIGNAL@
996_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
997# endif
998/* Need to cast, because on Cygwin 1.5.x systems, the return type is
999 'const char *'. */
1000_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
1001# endif
1002_GL_CXXALIASWARN (strsignal);
24d56127
LC
1003#elif defined GNULIB_POSIXCHECK
1004# undef strsignal
61cd9dc9
LC
1005# if HAVE_RAW_DECL_STRSIGNAL
1006_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
1007 "use gnulib module strsignal for portability");
1008# endif
24d56127
LC
1009#endif
1010
1011#if @GNULIB_STRVERSCMP@
1012# if !@HAVE_STRVERSCMP@
f4c79b3c 1013_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
005de2e8 1014 _GL_ATTRIBUTE_PURE
f4c79b3c 1015 _GL_ARG_NONNULL ((1, 2)));
24d56127 1016# endif
f4c79b3c
LC
1017_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
1018_GL_CXXALIASWARN (strverscmp);
24d56127
LC
1019#elif defined GNULIB_POSIXCHECK
1020# undef strverscmp
61cd9dc9
LC
1021# if HAVE_RAW_DECL_STRVERSCMP
1022_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
1023 "use gnulib module strverscmp for portability");
1024# endif
24d56127
LC
1025#endif
1026
1027
3d458a81
AW
1028#endif /* _@GUARD_PREFIX@_STRING_H */
1029#endif /* _@GUARD_PREFIX@_STRING_H */