Annotation of embedaddon/libiconv/srclib/string.in.h, revision 1.1.1.2

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>