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