File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srclib / string.in.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 09:29:43 2012 UTC (12 years, 1 month ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_14p0, v1_14, HEAD
libiconv v1.14

    1: /* A GNU-like <string.h>.
    2: 
    3:    Copyright (C) 1995-1996, 2001-2011 Free Software Foundation, Inc.
    4: 
    5:    This program is free software; you can redistribute it and/or modify
    6:    it under the terms of the GNU General Public License as published by
    7:    the Free Software Foundation; either version 3, or (at your option)
    8:    any later version.
    9: 
   10:    This program is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13:    GNU General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU General Public License
   16:    along with this program; if not, write to the Free Software Foundation,
   17:    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
   18: 
   19: #ifndef _@GUARD_PREFIX@_STRING_H
   20: 
   21: #if __GNUC__ >= 3
   22: @PRAGMA_SYSTEM_HEADER@
   23: #endif
   24: @PRAGMA_COLUMNS@
   25: 
   26: /* The include_next requires a split double-inclusion guard.  */
   27: #@INCLUDE_NEXT@ @NEXT_STRING_H@
   28: 
   29: #ifndef _@GUARD_PREFIX@_STRING_H
   30: #define _@GUARD_PREFIX@_STRING_H
   31: 
   32: /* NetBSD 5.0 mis-defines NULL.  */
   33: #include <stddef.h>
   34: 
   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 */
   46: #endif
   47: 
   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.  */
   58: 
   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
   75: 
   76: 
   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
   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@
   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);
  122: # endif
  123: #elif defined GNULIB_POSIXCHECK
  124: # undef memchr
  125: /* Assume memchr is always declared.  */
  126: _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
  127:                  "use gnulib module memchr for portability" );
  128: #endif
  129: 
  130: /* Return the first occurrence of NEEDLE in HAYSTACK.  */
  131: #if @GNULIB_MEMMEM@
  132: # if @REPLACE_MEMMEM@
  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));
  155: # endif
  156: _GL_CXXALIASWARN (memmem);
  157: #elif defined GNULIB_POSIXCHECK
  158: # undef memmem
  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
  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@
  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);
  179: #elif defined GNULIB_POSIXCHECK
  180: # undef mempcpy
  181: # if HAVE_RAW_DECL_MEMPCPY
  182: _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
  183:                  "use gnulib module mempcpy for portability");
  184: # endif
  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@
  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);
  206: # endif
  207: #elif defined GNULIB_POSIXCHECK
  208: # undef memrchr
  209: # if HAVE_RAW_DECL_MEMRCHR
  210: _GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
  211:                  "use gnulib module memrchr for portability");
  212: # endif
  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@
  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);
  236: # endif
  237: #elif defined GNULIB_POSIXCHECK
  238: # undef rawmemchr
  239: # if HAVE_RAW_DECL_RAWMEMCHR
  240: _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
  241:                  "use gnulib module rawmemchr for portability");
  242: # endif
  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@
  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);
  255: #elif defined GNULIB_POSIXCHECK
  256: # undef stpcpy
  257: # if HAVE_RAW_DECL_STPCPY
  258: _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
  259:                  "use gnulib module stpcpy for portability");
  260: # endif
  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@
  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));
  288: # endif
  289: _GL_CXXALIASWARN (stpncpy);
  290: #elif defined GNULIB_POSIXCHECK
  291: # undef stpncpy
  292: # if HAVE_RAW_DECL_STPNCPY
  293: _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
  294:                  "use gnulib module stpncpy for portability");
  295: # endif
  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
  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");
  306: #endif
  307: 
  308: /* Find the first occurrence of C in S or the final NUL byte.  */
  309: #if @GNULIB_STRCHRNUL@
  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);
  338: # endif
  339: #elif defined GNULIB_POSIXCHECK
  340: # undef strchrnul
  341: # if HAVE_RAW_DECL_STRCHRNUL
  342: _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
  343:                  "use gnulib module strchrnul for portability");
  344: # endif
  345: #endif
  346: 
  347: /* Duplicate S, returning an identical malloc'd string.  */
  348: #if @GNULIB_STRDUP@
  349: # if @REPLACE_STRDUP@
  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));
  365: # endif
  366: _GL_CXXALIASWARN (strdup);
  367: #elif defined GNULIB_POSIXCHECK
  368: # undef strdup
  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
  395: #endif
  396: 
  397: /* Return a newly allocated copy of at most N bytes of STRING.  */
  398: #if @GNULIB_STRNDUP@
  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));
  413: # endif
  414: _GL_CXXALIASWARN (strndup);
  415: #elif defined GNULIB_POSIXCHECK
  416: # undef strndup
  417: # if HAVE_RAW_DECL_STRNDUP
  418: _GL_WARN_ON_USE (strndup, "strndup is unportable - "
  419:                  "use gnulib module strndup for portability");
  420: # endif
  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@
  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));
  443: # endif
  444: _GL_CXXALIASWARN (strnlen);
  445: #elif defined GNULIB_POSIXCHECK
  446: # undef strnlen
  447: # if HAVE_RAW_DECL_STRNLEN
  448: _GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
  449:                  "use gnulib module strnlen for portability");
  450: # endif
  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
  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");
  463: #endif
  464: 
  465: /* Find the first occurrence in S of any character in ACCEPT.  */
  466: #if @GNULIB_STRPBRK@
  467: # if ! @HAVE_STRPBRK@
  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);
  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
  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");
  495: # endif
  496: #elif defined GNULIB_POSIXCHECK
  497: # undef strpbrk
  498: # if HAVE_RAW_DECL_STRPBRK
  499: _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
  500:                  "use gnulib module strpbrk for portability");
  501: # endif
  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
  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");
  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
  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");
  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@
  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);
  549: # if defined GNULIB_POSIXCHECK
  550: #  undef strsep
  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");
  554: # endif
  555: #elif defined GNULIB_POSIXCHECK
  556: # undef strsep
  557: # if HAVE_RAW_DECL_STRSEP
  558: _GL_WARN_ON_USE (strsep, "strsep is unportable - "
  559:                  "use gnulib module strsep for portability");
  560: # endif
  561: #endif
  562: 
  563: #if @GNULIB_STRSTR@
  564: # if @REPLACE_STRSTR@
  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);
  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
  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");
  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@
  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);
  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
  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
  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:
  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"
  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@
  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));
  699: # endif
  700: _GL_CXXALIASWARN (strtok_r);
  701: # if defined GNULIB_POSIXCHECK
  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");
  705: # endif
  706: #elif defined GNULIB_POSIXCHECK
  707: # undef strtok_r
  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
  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.  */
  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);
  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.  */
  740: _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
  741:      _GL_ARG_NONNULL ((1));
  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.  */
  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);
  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.  */
  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);
  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.  */
  789: _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
  790:      _GL_ARG_NONNULL ((1, 2));
  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.  */
  800: _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
  801:      _GL_ARG_NONNULL ((1, 2));
  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!  */
  814: _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
  815:      _GL_ARG_NONNULL ((1, 2));
  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,
  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!
  825:    Unlike strncasecmp(), this function works correctly in multibyte
  826:    locales.  */
  827: _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
  828:      _GL_ARG_NONNULL ((1, 2));
  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.  */
  837: _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
  838:      _GL_ARG_NONNULL ((1, 2));
  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.  */
  847: _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
  848:      _GL_ARG_NONNULL ((1, 2));
  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.  */
  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);
  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.  */
  877: _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
  878:      _GL_ARG_NONNULL ((1, 2));
  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().  */
  896: _GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
  897:      _GL_ARG_NONNULL ((1, 2));
  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:
  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"
  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().  */
  917: _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
  918:      _GL_ARG_NONNULL ((2, 3));
  919: #endif
  920: 
  921: /* Map any int, typically from errno, into an error message.  */
  922: #if @GNULIB_STRERROR@
  923: # if @REPLACE_STRERROR@
  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));
  932: # endif
  933: _GL_CXXALIASWARN (strerror);
  934: #elif defined GNULIB_POSIXCHECK
  935: # undef strerror
  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
  968: #endif
  969: 
  970: #if @GNULIB_STRSIGNAL@
  971: # if @REPLACE_STRSIGNAL@
  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));
  984: # endif
  985: _GL_CXXALIASWARN (strsignal);
  986: #elif defined GNULIB_POSIXCHECK
  987: # undef strsignal
  988: # if HAVE_RAW_DECL_STRSIGNAL
  989: _GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
  990:                  "use gnulib module strsignal for portability");
  991: # endif
  992: #endif
  993: 
  994: #if @GNULIB_STRVERSCMP@
  995: # if !@HAVE_STRVERSCMP@
  996: _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
  997:                                    _GL_ARG_NONNULL ((1, 2)));
  998: # endif
  999: _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
 1000: _GL_CXXALIASWARN (strverscmp);
 1001: #elif defined GNULIB_POSIXCHECK
 1002: # undef strverscmp
 1003: # if HAVE_RAW_DECL_STRVERSCMP
 1004: _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
 1005:                  "use gnulib module strverscmp for portability");
 1006: # endif
 1007: #endif
 1008: 
 1009: 
 1010: #endif /* _@GUARD_PREFIX@_STRING_H */
 1011: #endif /* _@GUARD_PREFIX@_STRING_H */

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