~ubuntu-branches/debian/sid/emacs24/sid

« back to all changes in this revision

Viewing changes to lib/string.in.h

  • Committer: Package Import Robot
  • Author(s): Rob Browning
  • Date: 2014-10-25 14:37:43 UTC
  • mfrom: (13.1.3 experimental)
  • Revision ID: package-import@ubuntu.com-20141025143743-m9q5reoyyyjq3p2h
Tags: 24.4+1-4
Update emacsen-common dependency as per policy.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* A GNU-like <string.h>.
 
2
 
 
3
   Copyright (C) 1995-1996, 2001-2014 Free Software Foundation, Inc.
 
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
 
16
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
17
 
 
18
#ifndef _@GUARD_PREFIX@_STRING_H
 
19
 
 
20
#if __GNUC__ >= 3
 
21
@PRAGMA_SYSTEM_HEADER@
 
22
#endif
 
23
@PRAGMA_COLUMNS@
 
24
 
 
25
/* The include_next requires a split double-inclusion guard.  */
 
26
#@INCLUDE_NEXT@ @NEXT_STRING_H@
 
27
 
 
28
#ifndef _@GUARD_PREFIX@_STRING_H
 
29
#define _@GUARD_PREFIX@_STRING_H
 
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
 
38
 
 
39
/* The __attribute__ feature is available in gcc versions 2.5 and later.
 
40
   The attribute __pure__ was added in gcc 2.96.  */
 
41
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 
42
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
 
43
#else
 
44
# define _GL_ATTRIBUTE_PURE /* empty */
 
45
#endif
 
46
 
 
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
 
53
 
 
54
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
55
 
 
56
/* The definition of _GL_ARG_NONNULL is copied here.  */
 
57
 
 
58
/* The definition of _GL_WARN_ON_USE is copied here.  */
 
59
 
 
60
 
 
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
 
 
91
/* Return the first instance of C within N bytes of S, or NULL.  */
 
92
#if @GNULIB_MEMCHR@
 
93
# if @REPLACE_MEMCHR@
 
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)
 
98
                                  _GL_ATTRIBUTE_PURE
 
99
                                  _GL_ARG_NONNULL ((1)));
 
100
_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
 
101
# else
 
102
#  if ! @HAVE_MEMCHR@
 
103
_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
 
104
                                  _GL_ATTRIBUTE_PURE
 
105
                                  _GL_ARG_NONNULL ((1)));
 
106
#  endif
 
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
 
114
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
121
# endif
 
122
#elif defined GNULIB_POSIXCHECK
 
123
# undef memchr
 
124
/* Assume memchr is always declared.  */
 
125
_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
 
126
                 "use gnulib module memchr for portability" );
 
127
#endif
 
128
 
 
129
/* Return the first occurrence of NEEDLE in HAYSTACK.  */
 
130
#if @GNULIB_MEMMEM@
 
131
# if @REPLACE_MEMMEM@
 
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)
 
138
                  _GL_ATTRIBUTE_PURE
 
139
                  _GL_ARG_NONNULL ((1, 3)));
 
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)
 
148
                  _GL_ATTRIBUTE_PURE
 
149
                  _GL_ARG_NONNULL ((1, 3)));
 
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);
 
156
#elif defined GNULIB_POSIXCHECK
 
157
# undef memmem
 
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
 
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@
 
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);
 
178
#elif defined GNULIB_POSIXCHECK
 
179
# undef mempcpy
 
180
# if HAVE_RAW_DECL_MEMPCPY
 
181
_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
 
182
                 "use gnulib module mempcpy for portability");
 
183
# endif
 
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@
 
189
_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
 
190
                                   _GL_ATTRIBUTE_PURE
 
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));
 
199
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
205
# endif
 
206
#elif defined GNULIB_POSIXCHECK
 
207
# undef memrchr
 
208
# if HAVE_RAW_DECL_MEMRCHR
 
209
_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
 
210
                 "use gnulib module memrchr for portability");
 
211
# endif
 
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@
 
219
_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
 
220
                                     _GL_ATTRIBUTE_PURE
 
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));
 
229
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
235
# endif
 
236
#elif defined GNULIB_POSIXCHECK
 
237
# undef rawmemchr
 
238
# if HAVE_RAW_DECL_RAWMEMCHR
 
239
_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
 
240
                 "use gnulib module rawmemchr for portability");
 
241
# endif
 
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@
 
247
_GL_FUNCDECL_SYS (stpcpy, char *,
 
248
                  (char *restrict __dst, char const *restrict __src)
 
249
                  _GL_ARG_NONNULL ((1, 2)));
 
250
# endif
 
251
_GL_CXXALIAS_SYS (stpcpy, char *,
 
252
                  (char *restrict __dst, char const *restrict __src));
 
253
_GL_CXXALIASWARN (stpcpy);
 
254
#elif defined GNULIB_POSIXCHECK
 
255
# undef stpcpy
 
256
# if HAVE_RAW_DECL_STPCPY
 
257
_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
 
258
                 "use gnulib module stpcpy for portability");
 
259
# endif
 
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@
 
265
# if @REPLACE_STPNCPY@
 
266
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 
267
#   undef stpncpy
 
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
 
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
 
284
_GL_CXXALIAS_SYS (stpncpy, char *,
 
285
                  (char *restrict __dst, char const *restrict __src,
 
286
                   size_t __n));
 
287
# endif
 
288
_GL_CXXALIASWARN (stpncpy);
 
289
#elif defined GNULIB_POSIXCHECK
 
290
# undef stpncpy
 
291
# if HAVE_RAW_DECL_STPNCPY
 
292
_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
 
293
                 "use gnulib module stpncpy for portability");
 
294
# endif
 
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
 
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");
 
305
#endif
 
306
 
 
307
/* Find the first occurrence of C in S or the final NUL byte.  */
 
308
#if @GNULIB_STRCHRNUL@
 
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@
 
320
_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
 
321
                                     _GL_ATTRIBUTE_PURE
 
322
                                     _GL_ARG_NONNULL ((1)));
 
323
#  endif
 
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));
 
330
# endif
 
331
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
337
# endif
 
338
#elif defined GNULIB_POSIXCHECK
 
339
# undef strchrnul
 
340
# if HAVE_RAW_DECL_STRCHRNUL
 
341
_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
 
342
                 "use gnulib module strchrnul for portability");
 
343
# endif
 
344
#endif
 
345
 
 
346
/* Duplicate S, returning an identical malloc'd string.  */
 
347
#if @GNULIB_STRDUP@
 
348
# if @REPLACE_STRDUP@
 
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
 
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
 
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);
 
366
#elif defined GNULIB_POSIXCHECK
 
367
# undef strdup
 
368
# if HAVE_RAW_DECL_STRDUP
 
369
_GL_WARN_ON_USE (strdup, "strdup is unportable - "
 
370
                 "use gnulib module strdup for portability");
 
371
# endif
 
372
#endif
 
373
 
 
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
 
 
396
/* Return a newly allocated copy of at most N bytes of STRING.  */
 
397
#if @GNULIB_STRNDUP@
 
398
# if @REPLACE_STRNDUP@
 
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);
 
414
#elif defined GNULIB_POSIXCHECK
 
415
# undef strndup
 
416
# if HAVE_RAW_DECL_STRNDUP
 
417
_GL_WARN_ON_USE (strndup, "strndup is unportable - "
 
418
                 "use gnulib module strndup for portability");
 
419
# endif
 
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@
 
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)
 
432
                                   _GL_ATTRIBUTE_PURE
 
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@
 
437
_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
 
438
                                   _GL_ATTRIBUTE_PURE
 
439
                                   _GL_ARG_NONNULL ((1)));
 
440
#  endif
 
441
_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
 
442
# endif
 
443
_GL_CXXALIASWARN (strnlen);
 
444
#elif defined GNULIB_POSIXCHECK
 
445
# undef strnlen
 
446
# if HAVE_RAW_DECL_STRNLEN
 
447
_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
 
448
                 "use gnulib module strnlen for portability");
 
449
# endif
 
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
 
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");
 
462
#endif
 
463
 
 
464
/* Find the first occurrence in S of any character in ACCEPT.  */
 
465
#if @GNULIB_STRPBRK@
 
466
# if ! @HAVE_STRPBRK@
 
467
_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
 
468
                                   _GL_ATTRIBUTE_PURE
 
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));
 
477
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
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
 
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");
 
494
# endif
 
495
#elif defined GNULIB_POSIXCHECK
 
496
# undef strpbrk
 
497
# if HAVE_RAW_DECL_STRPBRK
 
498
_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
 
499
                 "use gnulib module strpbrk for portability");
 
500
# endif
 
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
 
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");
 
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
 
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");
 
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@
 
541
_GL_FUNCDECL_SYS (strsep, char *,
 
542
                  (char **restrict __stringp, char const *restrict __delim)
 
543
                  _GL_ARG_NONNULL ((1, 2)));
 
544
# endif
 
545
_GL_CXXALIAS_SYS (strsep, char *,
 
546
                  (char **restrict __stringp, char const *restrict __delim));
 
547
_GL_CXXALIASWARN (strsep);
 
548
# if defined GNULIB_POSIXCHECK
 
549
#  undef strsep
 
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");
 
553
# endif
 
554
#elif defined GNULIB_POSIXCHECK
 
555
# undef strsep
 
556
# if HAVE_RAW_DECL_STRSEP
 
557
_GL_WARN_ON_USE (strsep, "strsep is unportable - "
 
558
                 "use gnulib module strsep for portability");
 
559
# endif
 
560
#endif
 
561
 
 
562
#if @GNULIB_STRSTR@
 
563
# if @REPLACE_STRSTR@
 
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)
 
568
                                  _GL_ATTRIBUTE_PURE
 
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
 
579
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
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
 
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");
 
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@
 
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)
 
610
                  _GL_ATTRIBUTE_PURE
 
611
                  _GL_ARG_NONNULL ((1, 2)));
 
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)
 
618
                  _GL_ATTRIBUTE_PURE
 
619
                  _GL_ARG_NONNULL ((1, 2)));
 
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
 
628
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
 
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);
 
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
 
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
 
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:
 
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"
 
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@
 
673
# if @REPLACE_STRTOK_R@
 
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);
 
700
# if defined GNULIB_POSIXCHECK
 
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");
 
704
# endif
 
705
#elif defined GNULIB_POSIXCHECK
 
706
# undef strtok_r
 
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
 
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.  */
 
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.  */
 
724
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 
725
#   define mbslen rpl_mbslen
 
726
#  endif
 
727
_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
 
728
                                  _GL_ATTRIBUTE_PURE
 
729
                                  _GL_ARG_NONNULL ((1)));
 
730
_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
 
731
# else
 
732
_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
 
733
                                  _GL_ATTRIBUTE_PURE
 
734
                                  _GL_ARG_NONNULL ((1)));
 
735
_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
 
736
# endif
 
737
_GL_CXXALIASWARN (mbslen);
 
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.  */
 
743
_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
 
744
     _GL_ATTRIBUTE_PURE
 
745
     _GL_ARG_NONNULL ((1));
 
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.  */
 
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)
 
758
                                  _GL_ATTRIBUTE_PURE
 
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)
 
763
                                  _GL_ATTRIBUTE_PURE
 
764
                                  _GL_ARG_NONNULL ((1)));
 
765
_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
 
766
# endif
 
767
_GL_CXXALIASWARN (mbschr);
 
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.  */
 
775
# if defined __hpux || defined __INTERIX
 
776
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 
777
#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
 
778
#  endif
 
779
_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
 
780
                                   _GL_ATTRIBUTE_PURE
 
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)
 
785
                                   _GL_ATTRIBUTE_PURE
 
786
                                   _GL_ARG_NONNULL ((1)));
 
787
_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
 
788
# endif
 
789
_GL_CXXALIASWARN (mbsrchr);
 
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.  */
 
797
_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
 
798
     _GL_ATTRIBUTE_PURE
 
799
     _GL_ARG_NONNULL ((1, 2));
 
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.  */
 
809
_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
 
810
     _GL_ATTRIBUTE_PURE
 
811
     _GL_ARG_NONNULL ((1, 2));
 
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!  */
 
824
_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
 
825
     _GL_ATTRIBUTE_PURE
 
826
     _GL_ARG_NONNULL ((1, 2));
 
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,
 
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!
 
836
   Unlike strncasecmp(), this function works correctly in multibyte
 
837
   locales.  */
 
838
_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
 
839
     _GL_ATTRIBUTE_PURE
 
840
     _GL_ARG_NONNULL ((1, 2));
 
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.  */
 
849
_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
 
850
     _GL_ATTRIBUTE_PURE
 
851
     _GL_ARG_NONNULL ((1, 2));
 
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.  */
 
860
_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
 
861
     _GL_ATTRIBUTE_PURE
 
862
     _GL_ARG_NONNULL ((1, 2));
 
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.  */
 
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)
 
875
                                   _GL_ATTRIBUTE_PURE
 
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)
 
880
                                   _GL_ATTRIBUTE_PURE
 
881
                                   _GL_ARG_NONNULL ((1, 2)));
 
882
_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
 
883
# endif
 
884
_GL_CXXALIASWARN (mbspbrk);
 
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.  */
 
893
_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
 
894
     _GL_ATTRIBUTE_PURE
 
895
     _GL_ARG_NONNULL ((1, 2));
 
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().  */
 
913
_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
 
914
     _GL_ARG_NONNULL ((1, 2));
 
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:
 
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"
 
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().  */
 
934
_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
 
935
     _GL_ARG_NONNULL ((2, 3));
 
936
#endif
 
937
 
 
938
/* Map any int, typically from errno, into an error message.  */
 
939
#if @GNULIB_STRERROR@
 
940
# if @REPLACE_STRERROR@
 
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);
 
951
#elif defined GNULIB_POSIXCHECK
 
952
# undef strerror
 
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");
 
956
#endif
 
957
 
 
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
 
 
987
#if @GNULIB_STRSIGNAL@
 
988
# if @REPLACE_STRSIGNAL@
 
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);
 
1003
#elif defined GNULIB_POSIXCHECK
 
1004
# undef strsignal
 
1005
# if HAVE_RAW_DECL_STRSIGNAL
 
1006
_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
 
1007
                 "use gnulib module strsignal for portability");
 
1008
# endif
 
1009
#endif
 
1010
 
 
1011
#if @GNULIB_STRVERSCMP@
 
1012
# if !@HAVE_STRVERSCMP@
 
1013
_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
 
1014
                                   _GL_ATTRIBUTE_PURE
 
1015
                                   _GL_ARG_NONNULL ((1, 2)));
 
1016
# endif
 
1017
_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
 
1018
_GL_CXXALIASWARN (strverscmp);
 
1019
#elif defined GNULIB_POSIXCHECK
 
1020
# undef strverscmp
 
1021
# if HAVE_RAW_DECL_STRVERSCMP
 
1022
_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
 
1023
                 "use gnulib module strverscmp for portability");
 
1024
# endif
 
1025
#endif
 
1026
 
 
1027
 
 
1028
#endif /* _@GUARD_PREFIX@_STRING_H */
 
1029
#endif /* _@GUARD_PREFIX@_STRING_H */