105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A GNU-like <string.h>. 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 1995-1996, 2001-2012 Free Software Foundation, Inc. 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software; you can redistribute it and/or modify 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang it under the terms of the GNU General Public License as published by 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation; either version 3, or (at your option) 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang any later version. 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is distributed in the hope that it will be useful, 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang but WITHOUT ANY WARRANTY; without even the implied warranty of 1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang GNU General Public License for more details. 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang You should have received a copy of the GNU General Public License 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program; if not, see <http://www.gnu.org/licenses/>. */ 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_STRING_H 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ >= 3 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_SYSTEM_HEADER@ 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang@PRAGMA_COLUMNS@ 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The include_next requires a split double-inclusion guard. */ 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#@INCLUDE_NEXT@ @NEXT_STRING_H@ 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _@GUARD_PREFIX@_STRING_H 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define _@GUARD_PREFIX@_STRING_H 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* NetBSD 5.0 mis-defines NULL. */ 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <stddef.h> 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* MirBSD defines mbslen as a macro. */ 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSLEN@ && defined __MirBSD__ 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <wchar.h> 3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The __attribute__ feature is available in gcc versions 2.5 and later. 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang The attribute __pure__ was added in gcc 2.96. */ 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define _GL_ATTRIBUTE_PURE /* empty */ 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* But in any case avoid namespace pollution on glibc systems. */ 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang && ! defined __GLIBC__ 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <unistd.h> 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_ARG_NONNULL is copied here. */ 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The definition of _GL_WARN_ON_USE is copied here. */ 5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the index of the least-significant set bit. */ 6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FFSL@ 6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_FFSL@ 6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (ffsl, int, (long int i)); 6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (ffsl, int, (long int i)); 6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (ffsl); 6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef ffsl 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FFSL 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the index of the least-significant set bit. */ 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_FFSLL@ 7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_FFSLL@ 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); 8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (ffsll); 8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef ffsll 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_FFSLL 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the first instance of C within N bytes of S, or NULL. */ 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MEMCHR@ 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MEMCHR@ 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define memchr rpl_memchr 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_MEMCHR@ 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C" { const void * std::memchr (const void *, int, size_t); } 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { void * std::memchr (void *, int, size_t); } */ 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (memchr, 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang void *, (void const *__s, int __c, size_t __n), 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *, (void const *__s, int __c, size_t __n)); 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memchr, void const *, 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void const *__s, int __c, size_t __n)); 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memchr); 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memchr 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume memchr is always declared. */ 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module memchr for portability" ); 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the first occurrence of NEEDLE in HAYSTACK. */ 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MEMMEM@ 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_MEMMEM@ 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define memmem rpl_memmem 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (memmem, void *, 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void const *__haystack, size_t __haystack_len, 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *__needle, size_t __needle_len) 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 3))); 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (memmem, void *, 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void const *__haystack, size_t __haystack_len, 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *__needle, size_t __needle_len)); 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_MEMMEM@ 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memmem, void *, 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void const *__haystack, size_t __haystack_len, 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *__needle, size_t __needle_len) 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 3))); 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (memmem, void *, 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void const *__haystack, size_t __haystack_len, 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *__needle, size_t __needle_len)); 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memmem); 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memmem 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMMEM 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module memmem-simple for portability, " 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "and module memmem for speed" ); 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy N bytes of SRC to DEST, return pointer to bytes after the 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang last written byte. */ 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MEMPCPY@ 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_MEMPCPY@ 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mempcpy, void *, 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void *restrict __dest, void const *restrict __src, 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n) 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mempcpy, void *, 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (void *restrict __dest, void const *restrict __src, 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n)); 17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mempcpy); 17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mempcpy 18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMPCPY 18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " 18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module mempcpy for portability"); 18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search backwards through a block for a byte (specified as an int). */ 18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MEMRCHR@ 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_MEMRCHR@ 18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) 19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { const void * std::memrchr (const void *, int, size_t); } 19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { void * std::memrchr (void *, int, size_t); } */ 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (memrchr, 19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void *, (void const *, int, size_t), 19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *, (void const *, int, size_t)); 19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); 20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); 20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (memrchr); 20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef memrchr 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_MEMRCHR 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " 21005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module memrchr for portability"); 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 21305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of C in S. More efficient than 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang memchr(S,C,N), at the expense of undefined behavior if C does not 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang occur within N bytes. */ 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_RAWMEMCHR@ 21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_RAWMEMCHR@ 21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) 22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { const void * std::rawmemchr (const void *, int); } 22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { void * std::rawmemchr (void *, int); } */ 22605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (rawmemchr, 22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang void *, (void const *__s, int __c_in), 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang void const *, (void const *__s, int __c_in)); 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); 23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (rawmemchr); 23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef rawmemchr 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_RAWMEMCHR 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module rawmemchr for portability"); 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ 24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STPCPY@ 24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STPCPY@ 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (stpcpy, char *, 24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src) 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (stpcpy, char *, 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src)); 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (stpcpy); 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stpcpy 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STPCPY 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module stpcpy for portability"); 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Copy no more than N bytes of SRC to DST, returning a pointer past the 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wang last non-NUL byte written into DST. */ 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STPNCPY@ 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STPNCPY@ 26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stpncpy 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define stpncpy rpl_stpncpy 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (stpncpy, char *, 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src, 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n) 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (stpncpy, char *, 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src, 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n)); 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STPNCPY@ 27905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (stpncpy, char *, 28005436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src, 28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n) 28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (stpncpy, char *, 28505436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict __dst, char const *restrict __src, 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang size_t __n)); 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (stpncpy); 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef stpncpy 29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STPNCPY 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " 29305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module stpncpy for portability"); 29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 29505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strchr() does not work with multibyte strings if the locale encoding is 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wang GB18030 and the character to be searched is a digit. */ 30005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strchr 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strchr is always declared. */ 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " 30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in some multibyte locales - " 30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbschr if you care about internationalization"); 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of C in S or the final NUL byte. */ 30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRCHRNUL@ 30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRCHRNUL@ 31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 31105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strchrnul rpl_strchrnul 31205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 31305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) 31405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 31505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 31605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strchrnul, char *, 31705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *str, int ch)); 31805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 31905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STRCHRNUL@ 32005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) 32105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 32205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 32305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 32405436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 32505436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { const char * std::strchrnul (const char *, int); } 32605436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { char * std::strchrnul (char *, int); } */ 32705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strchrnul, 32805436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *, (char const *__s, int __c_in), 32905436638acc7c010349a69c3395f1a57c642dc62Ying Wang char const *, (char const *__s, int __c_in)); 33005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 33105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 33205436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); 33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); 33505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 33605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strchrnul); 33705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 33805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 33905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strchrnul 34005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRCHRNUL 34105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " 34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strchrnul for portability"); 34305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 34405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 34505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 34605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Duplicate S, returning an identical malloc'd string. */ 34705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRDUP@ 34805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRDUP@ 34905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 35005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strdup 35105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strdup rpl_strdup 35205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 35305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); 35405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); 35505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 35605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup 35705436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* strdup exists as a function and as a macro. Get rid of the macro. */ 35805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strdup 35905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 36005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(@HAVE_DECL_STRDUP@ || defined strdup) 36105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); 36205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); 36405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 36505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strdup); 36605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 36705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strdup 36805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRDUP 36905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strdup, "strdup is unportable - " 37005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strdup for portability"); 37105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 37205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 37305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 37405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Append no more than N characters from SRC onto DEST. */ 37505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRNCAT@ 37605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRNCAT@ 37705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 37805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strncat 37905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strncat rpl_strncat 38005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 38105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) 38205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 38305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); 38405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 38505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); 38605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 38705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strncat); 38805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 38905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strncat 39005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNCAT 39105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strncat, "strncat is unportable - " 39205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strncat for portability"); 39305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 39405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 39505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return a newly allocated copy of at most N bytes of STRING. */ 39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRNDUP@ 39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRNDUP@ 39905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 40005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strndup 40105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strndup rpl_strndup 40205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 40305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) 40405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 40505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); 40605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 40705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_STRNDUP@ 40805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) 40905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 41005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 41105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); 41205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 41305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strndup); 41405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 41505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strndup 41605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNDUP 41705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strndup, "strndup is unportable - " 41805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strndup for portability"); 41905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 42005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 42105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 42205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the length (number of bytes) of STRING, but scan at most 42305436638acc7c010349a69c3395f1a57c642dc62Ying Wang MAXLEN bytes. If no '\0' terminator is found in that many bytes, 42405436638acc7c010349a69c3395f1a57c642dc62Ying Wang return MAXLEN. */ 42505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRNLEN@ 42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRNLEN@ 42705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 42805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strnlen 42905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strnlen rpl_strnlen 43005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 43105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen) 43205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 43305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 43405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); 43505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 43605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_STRNLEN@ 43705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) 43805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 43905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 44005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 44105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); 44205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 44305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strnlen); 44405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 44505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strnlen 44605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRNLEN 44705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " 44805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strnlen for portability"); 44905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 45005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 45105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 45205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK 45305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strcspn() assumes the second argument is a list of single-byte characters. 45405436638acc7c010349a69c3395f1a57c642dc62Ying Wang Even in this simple case, it does not work with multibyte strings if the 45505436638acc7c010349a69c3395f1a57c642dc62Ying Wang locale encoding is GB18030 and one of the characters to be searched is a 45605436638acc7c010349a69c3395f1a57c642dc62Ying Wang digit. */ 45705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strcspn 45805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strcspn is always declared. */ 45905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " 46005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in multibyte locales - " 46105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbscspn if you care about internationalization"); 46205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 46305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 46405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in S of any character in ACCEPT. */ 46505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRPBRK@ 46605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STRPBRK@ 46705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) 46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 47205436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C" { const char * strpbrk (const char *, const char *); } 47305436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { char * strpbrk (char *, const char *); } */ 47405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strpbrk, 47505436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *, (char const *__s, char const *__accept), 47605436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *, (char const *__s, char const *__accept)); 47705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 47805436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 47905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); 48005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strpbrk, char const *, 48105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char const *__s, char const *__accept)); 48205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 48305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strpbrk); 48405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 48505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK 48605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strpbrk() assumes the second argument is a list of single-byte characters. 48705436638acc7c010349a69c3395f1a57c642dc62Ying Wang Even in this simple case, it does not work with multibyte strings if the 48805436638acc7c010349a69c3395f1a57c642dc62Ying Wang locale encoding is GB18030 and one of the characters to be searched is a 48905436638acc7c010349a69c3395f1a57c642dc62Ying Wang digit. */ 49005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strpbrk 49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " 49205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in multibyte locales - " 49305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbspbrk if you care about internationalization"); 49405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 49505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 49605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strpbrk 49705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRPBRK 49805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " 49905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strpbrk for portability"); 50005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 50105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK 50405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strspn() assumes the second argument is a list of single-byte characters. 50505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Even in this simple case, it cannot work with multibyte strings. */ 50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strspn 50705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strspn is always declared. */ 50805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " 50905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in multibyte locales - " 51005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbsspn if you care about internationalization"); 51105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 51305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if defined GNULIB_POSIXCHECK 51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strrchr() does not work with multibyte strings if the locale encoding is 51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang GB18030 and the character to be searched is a digit. */ 51605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strrchr 51705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strrchr is always declared. */ 51805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " 51905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in some multibyte locales - " 52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbsrchr if you care about internationalization"); 52105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. 52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang If one is found, overwrite it with a NUL, and advance *STRINGP 52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang to point to the next char after it. Otherwise, set *STRINGP to NULL. 52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang If *STRINGP was already NULL, nothing happens. 52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang Return the old value of *STRINGP. 52805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 52905436638acc7c010349a69c3395f1a57c642dc62Ying Wang This is a variant of strtok() that is multithread-safe and supports 53005436638acc7c010349a69c3395f1a57c642dc62Ying Wang empty fields. 53105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 53205436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It modifies the original string. 53305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: These functions cannot be used on constant strings. 53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: The identity of the delimiting character is lost. 53505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It doesn't work with multibyte strings unless all of the delimiter 53605436638acc7c010349a69c3395f1a57c642dc62Ying Wang characters are ASCII characters < 0x30. 53705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 53805436638acc7c010349a69c3395f1a57c642dc62Ying Wang See also strtok_r(). */ 53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRSEP@ 54005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STRSEP@ 54105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strsep, char *, 54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char **restrict __stringp, char const *restrict __delim) 54305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 54405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 54505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strsep, char *, 54605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char **restrict __stringp, char const *restrict __delim)); 54705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strsep); 54805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK 54905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strsep 55005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " 55105436638acc7c010349a69c3395f1a57c642dc62Ying Wang "in multibyte locales - " 55205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbssep if you care about internationalization"); 55305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 55405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 55505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strsep 55605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRSEP 55705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsep, "strsep is unportable - " 55805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strsep for portability"); 55905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 56005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 56105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 56205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRSTR@ 56305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRSTR@ 56405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 56505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strstr rpl_strstr 56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) 56805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 56905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 57005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); 57105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 57205436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 57305436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { const char * strstr (const char *, const char *); } 57405436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { char * strstr (char *, const char *); } */ 57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strstr, 57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *, (const char *haystack, const char *needle), 57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *, (const char *haystack, const char *needle)); 57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 57905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 58005436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); 58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strstr, const char *, 58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *haystack, const char *needle)); 58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 58505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strstr); 58605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 58705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 58805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strstr() does not work with multibyte strings if the locale encoding is 58905436638acc7c010349a69c3395f1a57c642dc62Ying Wang different from UTF-8: 59005436638acc7c010349a69c3395f1a57c642dc62Ying Wang POSIX says that it operates on "strings", and "string" in POSIX is defined 59105436638acc7c010349a69c3395f1a57c642dc62Ying Wang as a sequence of bytes, not of characters. */ 59205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strstr 59305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strstr is always declared. */ 59405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " 59505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "work correctly on character strings in most " 59605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "multibyte locales - " 59705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbsstr if you care about internationalization, " 59805436638acc7c010349a69c3395f1a57c642dc62Ying Wang "or use strstr if you care about speed"); 59905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 60005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 60105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive 60205436638acc7c010349a69c3395f1a57c642dc62Ying Wang comparison. */ 60305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRCASESTR@ 60405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRCASESTR@ 60505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 60605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strcasestr rpl_strcasestr 60705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 60805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strcasestr, char *, 60905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *haystack, const char *needle) 61005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 61105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 61205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strcasestr, char *, 61305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *haystack, const char *needle)); 61405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 61505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_STRCASESTR@ 61605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strcasestr, char *, 61705436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *haystack, const char *needle) 61805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 61905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 62005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 62105436638acc7c010349a69c3395f1a57c642dc62Ying Wang /* On some systems, this function is defined as an overloaded function: 62205436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { const char * strcasestr (const char *, const char *); } 62305436638acc7c010349a69c3395f1a57c642dc62Ying Wang extern "C++" { char * strcasestr (char *, const char *); } */ 62405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST2 (strcasestr, 62505436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *, (const char *haystack, const char *needle), 62605436638acc7c010349a69c3395f1a57c642dc62Ying Wang const char *, (const char *haystack, const char *needle)); 62705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ 62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) 63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); 63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN1 (strcasestr, const char *, 63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang (const char *haystack, const char *needle)); 63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strcasestr); 63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* strcasestr() does not work with multibyte strings: 63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang It is a glibc extension, and glibc implements it only for unibyte 63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang locales. */ 64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strcasestr 64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRCASESTR 64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " 64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "strings in multibyte locales - " 64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbscasestr if you care about " 64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "internationalization, or use c-strcasestr if you want " 64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang "a locale independent function"); 64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 64905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 65005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse S into tokens separated by characters in DELIM. 65105436638acc7c010349a69c3395f1a57c642dc62Ying Wang If S is NULL, the saved pointer in SAVE_PTR is used as 65205436638acc7c010349a69c3395f1a57c642dc62Ying Wang the next starting point. For example: 65305436638acc7c010349a69c3395f1a57c642dc62Ying Wang char s[] = "-abc-=-def"; 65405436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *sp; 65505436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" 65605436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL 65705436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = strtok_r(NULL, "=", &sp); // x = NULL 65805436638acc7c010349a69c3395f1a57c642dc62Ying Wang // s = "abc\0-def\0" 65905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66005436638acc7c010349a69c3395f1a57c642dc62Ying Wang This is a variant of strtok() that is multithread-safe. 66105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66205436638acc7c010349a69c3395f1a57c642dc62Ying Wang For the POSIX documentation for this function, see: 66305436638acc7c010349a69c3395f1a57c642dc62Ying Wang http://www.opengroup.org/susv3xsh/strtok.html 66405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 66505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It modifies the original string. 66605436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: These functions cannot be used on constant strings. 66705436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: The identity of the delimiting character is lost. 66805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It doesn't work with multibyte strings unless all of the delimiter 66905436638acc7c010349a69c3395f1a57c642dc62Ying Wang characters are ASCII characters < 0x30. 67005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 67105436638acc7c010349a69c3395f1a57c642dc62Ying Wang See also strsep(). */ 67205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRTOK_R@ 67305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRTOK_R@ 67405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 67505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strtok_r 67605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strtok_r rpl_strtok_r 67705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 67805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strtok_r, char *, 67905436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict s, char const *restrict delim, 68005436638acc7c010349a69c3395f1a57c642dc62Ying Wang char **restrict save_ptr) 68105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((2, 3))); 68205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strtok_r, char *, 68305436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict s, char const *restrict delim, 68405436638acc7c010349a69c3395f1a57c642dc62Ying Wang char **restrict save_ptr)); 68505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 68605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK 68705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strtok_r 68805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 68905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_STRTOK_R@ 69005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strtok_r, char *, 69105436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict s, char const *restrict delim, 69205436638acc7c010349a69c3395f1a57c642dc62Ying Wang char **restrict save_ptr) 69305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((2, 3))); 69405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 69505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strtok_r, char *, 69605436638acc7c010349a69c3395f1a57c642dc62Ying Wang (char *restrict s, char const *restrict delim, 69705436638acc7c010349a69c3395f1a57c642dc62Ying Wang char **restrict save_ptr)); 69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 69905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strtok_r); 70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined GNULIB_POSIXCHECK 70105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " 70205436638acc7c010349a69c3395f1a57c642dc62Ying Wang "strings in multibyte locales - " 70305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use mbstok_r if you care about internationalization"); 70405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 70505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 70605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strtok_r 70705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRTOK_R 70805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " 70905436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strtok_r for portability"); 71005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 71105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 71205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* The following functions are not specified by POSIX. They are gnulib 71505436638acc7c010349a69c3395f1a57c642dc62Ying Wang extensions. */ 71605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 71705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSLEN@ 71805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of multibyte characters in the character string STRING. 71905436638acc7c010349a69c3395f1a57c642dc62Ying Wang This considers multibyte characters, unlike strlen, which counts bytes. */ 72005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ 72105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef mbslen 72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ 72405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 72505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define mbslen rpl_mbslen 72605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 72705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) 72805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 72905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 73005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); 73105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 73205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) 73305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 73405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 73505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); 73605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 73705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbslen); 73805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 73905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 74005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSNLEN@ 74105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return the number of multibyte characters in the character string starting 74205436638acc7c010349a69c3395f1a57c642dc62Ying Wang at STRING and ending at STRING + LEN. */ 74305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) 74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1)); 74605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 74705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 74805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSCHR@ 74905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Locate the first single-byte character C in the character string STRING, 75005436638acc7c010349a69c3395f1a57c642dc62Ying Wang and return a pointer to it. Return NULL if C is not found in STRING. 75105436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strchr(), this function works correctly in multibyte locales with 75205436638acc7c010349a69c3395f1a57c642dc62Ying Wang encodings such as GB18030. */ 75305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux 75405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 75505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ 75605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 75705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) 75805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 75905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 76005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); 76105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 76205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) 76305436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 76405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); 76605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 76705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbschr); 76805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 76905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 77005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSRCHR@ 77105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Locate the last single-byte character C in the character string STRING, 77205436638acc7c010349a69c3395f1a57c642dc62Ying Wang and return a pointer to it. Return NULL if C is not found in STRING. 77305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strrchr(), this function works correctly in multibyte locales with 77405436638acc7c010349a69c3395f1a57c642dc62Ying Wang encodings such as GB18030. */ 77505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux || defined __INTERIX 77605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 77705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ 77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 77905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) 78005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 78105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 78205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); 78305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 78405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) 78505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 78605436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1))); 78705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); 78805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 78905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbsrchr); 79005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 79105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 79205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSSTR@ 79305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of the character string NEEDLE in the character 79405436638acc7c010349a69c3395f1a57c642dc62Ying Wang string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. 79505436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strstr(), this function works correctly in multibyte locales with 79605436638acc7c010349a69c3395f1a57c642dc62Ying Wang encodings different from UTF-8. */ 79705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) 79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 79905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 80005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 80105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 80205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSCASECMP@ 80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the character strings S1 and S2, ignoring case, returning less than, 80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang equal to or greater than zero if S1 is lexicographically less than, equal to 80505436638acc7c010349a69c3395f1a57c642dc62Ying Wang or greater than S2. 80605436638acc7c010349a69c3395f1a57c642dc62Ying Wang Note: This function may, in multibyte locales, return 0 for strings of 80705436638acc7c010349a69c3395f1a57c642dc62Ying Wang different lengths! 80805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strcasecmp(), this function works correctly in multibyte locales. */ 80905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) 81005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 81105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 81205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 81305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 81405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSNCASECMP@ 81505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the initial segment of the character string S1 consisting of at most 81605436638acc7c010349a69c3395f1a57c642dc62Ying Wang N characters with the initial segment of the character string S2 consisting 81705436638acc7c010349a69c3395f1a57c642dc62Ying Wang of at most N characters, ignoring case, returning less than, equal to or 81805436638acc7c010349a69c3395f1a57c642dc62Ying Wang greater than zero if the initial segment of S1 is lexicographically less 81905436638acc7c010349a69c3395f1a57c642dc62Ying Wang than, equal to or greater than the initial segment of S2. 82005436638acc7c010349a69c3395f1a57c642dc62Ying Wang Note: This function may, in multibyte locales, return 0 for initial segments 82105436638acc7c010349a69c3395f1a57c642dc62Ying Wang of different lengths! 82205436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strncasecmp(), this function works correctly in multibyte locales. 82305436638acc7c010349a69c3395f1a57c642dc62Ying Wang But beware that N is not a byte count but a character count! */ 82405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) 82505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 82605436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 82705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 82805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 82905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSPCASECMP@ 83005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Compare the initial segment of the character string STRING consisting of 83105436638acc7c010349a69c3395f1a57c642dc62Ying Wang at most mbslen (PREFIX) characters with the character string PREFIX, 83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ignoring case. If the two match, return a pointer to the first byte 83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang after this prefix in STRING. Otherwise, return NULL. 83405436638acc7c010349a69c3395f1a57c642dc62Ying Wang Note: This function may, in multibyte locales, return non-NULL if STRING 83505436638acc7c010349a69c3395f1a57c642dc62Ying Wang is of smaller length than PREFIX! 83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strncasecmp(), this function works correctly in multibyte 83705436638acc7c010349a69c3395f1a57c642dc62Ying Wang locales. */ 83805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) 83905436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 84005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 84105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 84205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 84305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSCASESTR@ 84405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence of the character string NEEDLE in the character 84505436638acc7c010349a69c3395f1a57c642dc62Ying Wang string HAYSTACK, using case-insensitive comparison. 84605436638acc7c010349a69c3395f1a57c642dc62Ying Wang Note: This function may, in multibyte locales, return success even if 84705436638acc7c010349a69c3395f1a57c642dc62Ying Wang strlen (haystack) < strlen (needle) ! 84805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strcasestr(), this function works correctly in multibyte locales. */ 84905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) 85005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 85105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 85205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 85305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSCSPN@ 85505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character 85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang in the character string ACCEPT. Return the number of bytes from the 85705436638acc7c010349a69c3395f1a57c642dc62Ying Wang beginning of the string to this occurrence, or to the end of the string 85805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if none exists. 85905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strcspn(), this function works correctly in multibyte locales. */ 86005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) 86105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 86305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 86505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSPBRK@ 86605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character 86705436638acc7c010349a69c3395f1a57c642dc62Ying Wang in the character string ACCEPT. Return the pointer to it, or NULL if none 86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang exists. 86905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strpbrk(), this function works correctly in multibyte locales. */ 87005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __hpux 87105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 87205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ 87305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 87405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) 87505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 87605436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 87705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); 87805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 87905436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) 88005436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 88105436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 88205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); 88305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 88405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (mbspbrk); 88505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 88605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 88705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSSPN@ 88805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Find the first occurrence in the character string STRING of any character 88905436638acc7c010349a69c3395f1a57c642dc62Ying Wang not in the character string REJECT. Return the number of bytes from the 89005436638acc7c010349a69c3395f1a57c642dc62Ying Wang beginning of the string to this occurrence, or to the end of the string 89105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if none exists. 89205436638acc7c010349a69c3395f1a57c642dc62Ying Wang Unlike strspn(), this function works correctly in multibyte locales. */ 89305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) 89405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 89505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 89705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 89805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSSEP@ 89905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Search the next delimiter (multibyte character listed in the character 90005436638acc7c010349a69c3395f1a57c642dc62Ying Wang string DELIM) starting at the character string *STRINGP. 90105436638acc7c010349a69c3395f1a57c642dc62Ying Wang If one is found, overwrite it with a NUL, and advance *STRINGP to point 90205436638acc7c010349a69c3395f1a57c642dc62Ying Wang to the next multibyte character after it. Otherwise, set *STRINGP to NULL. 90305436638acc7c010349a69c3395f1a57c642dc62Ying Wang If *STRINGP was already NULL, nothing happens. 90405436638acc7c010349a69c3395f1a57c642dc62Ying Wang Return the old value of *STRINGP. 90505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90605436638acc7c010349a69c3395f1a57c642dc62Ying Wang This is a variant of mbstok_r() that supports empty fields. 90705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 90805436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It modifies the original string. 90905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: These functions cannot be used on constant strings. 91005436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: The identity of the delimiting character is lost. 91105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang See also mbstok_r(). */ 91305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) 91405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2)); 91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 91605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_MBSTOK_R@ 91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Parse the character string STRING into tokens separated by characters in 91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang the character string DELIM. 92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang If STRING is NULL, the saved pointer in SAVE_PTR is used as 92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang the next starting point. For example: 92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang char s[] = "-abc-=-def"; 92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang char *sp; 92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" 92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL 92605436638acc7c010349a69c3395f1a57c642dc62Ying Wang x = mbstok_r(NULL, "=", &sp); // x = NULL 92705436638acc7c010349a69c3395f1a57c642dc62Ying Wang // s = "abc\0-def\0" 92805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: It modifies the original string. 93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: These functions cannot be used on constant strings. 93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang Caveat: The identity of the delimiting character is lost. 93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang See also mbssep(). */ 93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) 93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((2, 3)); 93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 93805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Map any int, typically from errno, into an error message. */ 93905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRERROR@ 94005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRERROR@ 94105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 94205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror 94305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strerror rpl_strerror 94405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 94505436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strerror, char *, (int)); 94605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strerror, char *, (int)); 94705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strerror, char *, (int)); 94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 95005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strerror); 95105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 95205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror 95305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Assume strerror is always declared. */ 95405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strerror, "strerror is unportable - " 95505436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strerror to guarantee non-NULL result"); 95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 95705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 95805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Map any int, typically from errno, into an error message. Multithread-safe. 95905436638acc7c010349a69c3395f1a57c642dc62Ying Wang Uses the POSIX declaration, not the glibc declaration. */ 96005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRERROR_R@ 96105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRERROR_R@ 96205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 96305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror_r 96405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strerror_r rpl_strerror_r 96505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) 96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((2))); 96805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); 96905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 97005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_DECL_STRERROR_R@ 97105436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) 97205436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((2))); 97305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 97405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); 97505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 97605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @HAVE_DECL_STRERROR_R@ 97705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strerror_r); 97805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 98005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strerror_r 98105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRERROR_R 98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " 98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strerror_r-posix for portability"); 98405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 98505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 98605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 98705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRSIGNAL@ 98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if @REPLACE_STRSIGNAL@ 98905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 99005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define strsignal rpl_strsignal 99105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 99205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); 99305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); 99405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else 99505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if ! @HAVE_DECL_STRSIGNAL@ 99605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); 99705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 99805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Need to cast, because on Cygwin 1.5.x systems, the return type is 99905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 'const char *'. */ 100005436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); 100105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 100205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strsignal); 100305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 100405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strsignal 100505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRSIGNAL 100605436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " 100705436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strsignal for portability"); 100805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 100905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 101005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 101105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if @GNULIB_STRVERSCMP@ 101205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if !@HAVE_STRVERSCMP@ 101305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) 101405436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ATTRIBUTE_PURE 101505436638acc7c010349a69c3395f1a57c642dc62Ying Wang _GL_ARG_NONNULL ((1, 2))); 101605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 101705436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); 101805436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_CXXALIASWARN (strverscmp); 101905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#elif defined GNULIB_POSIXCHECK 102005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# undef strverscmp 102105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if HAVE_RAW_DECL_STRVERSCMP 102205436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " 102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang "use gnulib module strverscmp for portability"); 102405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif 102505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif 102605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 102705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 102805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_STRING_H */ 102905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* _@GUARD_PREFIX@_STRING_H */ 1030