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>