1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-08 17:22:05 +03:00

string: Avoid #define replacements in C++ mode.

This commit is contained in:
Bruno Haible
2010-03-08 01:26:36 +01:00
parent 7ff877cb16
commit e377b2bd0f
3 changed files with 293 additions and 94 deletions

View File

@@ -1,5 +1,15 @@
2010-03-07 Bruno Haible <bruno@clisp.org> 2010-03-07 Bruno Haible <bruno@clisp.org>
string: Avoid #define replacements in C++ mode.
* lib/string.in.h: Include c++defs.h.
(stpncpy): Define to rpl_stpncpy, not gnu_stpncpy.
(memchr, memmem, mempcpy, memrchr, rawmemchr, stpcpy, stpncpy,
strchrnul, strdup, strndup, strnlen, strpbrk, strsep, strstr,
strcasestr, strtok_r, mbslen, mbschr, mbsrchr, mbspbrk, strerror,
strsignal, strverscmp): In C++, define a namespaced alias symbol.
* modules/string (Depends-on): Add c++defs.
(Makefile.am): Update string.h rule.
stdlib: Avoid #define replacements in C++ mode. stdlib: Avoid #define replacements in C++ mode.
* lib/stdlib.in.h: Include c++defs.h. * lib/stdlib.in.h: Include c++defs.h.
(atoll, calloc, canonicalize_file_name, getloadavg, getsubopt, malloc, (atoll, calloc, canonicalize_file_name, getloadavg, getsubopt, malloc,

View File

@@ -48,23 +48,39 @@
#endif #endif
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */
#ifdef __cplusplus
extern "C" {
#endif
/* Return the first instance of C within N bytes of S, or NULL. */ /* Return the first instance of C within N bytes of S, or NULL. */
#if @GNULIB_MEMCHR@ #if @GNULIB_MEMCHR@
# if @REPLACE_MEMCHR@ # if @REPLACE_MEMCHR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define memchr rpl_memchr # define memchr rpl_memchr
extern void *memchr (void const *__s, int __c, size_t __n)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1));
# endif # endif
_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
__attribute__ ((__pure__))
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
# else
# if defined __SUNPRO_CC
/* This compiler defines an overloaded function
extern "C" { const void * std::memchr (const void *, int, size_t); }
extern "C++" { inline void * std::memchr (void *, int, size_t); }
and diagnoses an error
"Error: Could not find a match for std::memchr(const void*, int, unsigned)"
*/
_GL_CXXALIAS_SYS_CAST2 (memchr,
void *, (void const *__s, int __c, size_t __n),
void const *, (void const *__s, int __c, size_t __n));
# else
_GL_CXXALIAS_SYS (memchr, void *, (void const *__s, int __c, size_t __n));
# endif
# endif
_GL_CXXALIASWARN (memchr);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef memchr # undef memchr
/* Assume memchr is always declared. */ /* Assume memchr is always declared. */
@@ -75,13 +91,28 @@ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
/* Return the first occurrence of NEEDLE in HAYSTACK. */ /* Return the first occurrence of NEEDLE in HAYSTACK. */
#if @GNULIB_MEMMEM@ #if @GNULIB_MEMMEM@
# if @REPLACE_MEMMEM@ # if @REPLACE_MEMMEM@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define memmem rpl_memmem # define memmem rpl_memmem
# endif # endif
# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ _GL_FUNCDECL_RPL (memmem, void *,
extern void *memmem (void const *__haystack, size_t __haystack_len, (void const *__haystack, size_t __haystack_len,
void const *__needle, size_t __needle_len) void const *__needle, size_t __needle_len)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)); __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
_GL_CXXALIAS_RPL (memmem, void *,
(void const *__haystack, size_t __haystack_len,
void const *__needle, size_t __needle_len));
# else
# if ! @HAVE_DECL_MEMMEM@
_GL_FUNCDECL_SYS (memmem, void *,
(void const *__haystack, size_t __haystack_len,
void const *__needle, size_t __needle_len)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
# endif # endif
_GL_CXXALIAS_SYS (memmem, void *,
(void const *__haystack, size_t __haystack_len,
void const *__needle, size_t __needle_len));
# endif
_GL_CXXALIASWARN (memmem);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef memmem # undef memmem
# if HAVE_RAW_DECL_MEMMEM # if HAVE_RAW_DECL_MEMMEM
@@ -95,10 +126,15 @@ _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
last written byte. */ last written byte. */
#if @GNULIB_MEMPCPY@ #if @GNULIB_MEMPCPY@
# if ! @HAVE_MEMPCPY@ # if ! @HAVE_MEMPCPY@
extern void *mempcpy (void *restrict __dest, void const *restrict __src, _GL_FUNCDECL_SYS (mempcpy, void *,
(void *restrict __dest, void const *restrict __src,
size_t __n) size_t __n)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2)));
# endif # endif
_GL_CXXALIAS_SYS (mempcpy, void *,
(void *restrict __dest, void const *restrict __src,
size_t __n));
_GL_CXXALIASWARN (mempcpy);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef mempcpy # undef mempcpy
# if HAVE_RAW_DECL_MEMPCPY # if HAVE_RAW_DECL_MEMPCPY
@@ -110,9 +146,12 @@ _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
/* Search backwards through a block for a byte (specified as an int). */ /* Search backwards through a block for a byte (specified as an int). */
#if @GNULIB_MEMRCHR@ #if @GNULIB_MEMRCHR@
# if ! @HAVE_DECL_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@
extern void *memrchr (void const *, int, size_t) _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1)); __attribute__ ((__pure__))
_GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (memrchr, void *, (void const *, int, size_t));
_GL_CXXALIASWARN (memrchr);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef memrchr # undef memrchr
# if HAVE_RAW_DECL_MEMRCHR # if HAVE_RAW_DECL_MEMRCHR
@@ -126,9 +165,12 @@ _GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
occur within N bytes. */ occur within N bytes. */
#if @GNULIB_RAWMEMCHR@ #if @GNULIB_RAWMEMCHR@
# if ! @HAVE_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@
extern void *rawmemchr (void const *__s, int __c_in) _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1)); __attribute__ ((__pure__))
_GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (rawmemchr, void *, (void const *__s, int __c_in));
_GL_CXXALIASWARN (rawmemchr);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef rawmemchr # undef rawmemchr
# if HAVE_RAW_DECL_RAWMEMCHR # if HAVE_RAW_DECL_RAWMEMCHR
@@ -140,9 +182,13 @@ _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
#if @GNULIB_STPCPY@ #if @GNULIB_STPCPY@
# if ! @HAVE_STPCPY@ # if ! @HAVE_STPCPY@
extern char *stpcpy (char *restrict __dst, char const *restrict __src) _GL_FUNCDECL_SYS (stpcpy, char *,
_GL_ARG_NONNULL ((1, 2)); (char *restrict __dst, char const *restrict __src)
_GL_ARG_NONNULL ((1, 2)));
# endif # endif
_GL_CXXALIAS_SYS (stpcpy, char *,
(char *restrict __dst, char const *restrict __src));
_GL_CXXALIASWARN (stpcpy);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef stpcpy # undef stpcpy
# if HAVE_RAW_DECL_STPCPY # if HAVE_RAW_DECL_STPCPY
@@ -155,11 +201,22 @@ _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
last non-NUL byte written into DST. */ last non-NUL byte written into DST. */
#if @GNULIB_STPNCPY@ #if @GNULIB_STPNCPY@
# if ! @HAVE_STPNCPY@ # if ! @HAVE_STPNCPY@
# define stpncpy gnu_stpncpy # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
extern char *stpncpy (char *restrict __dst, char const *restrict __src, # define stpncpy rpl_stpncpy
size_t __n)
_GL_ARG_NONNULL ((1, 2));
# endif # endif
_GL_FUNCDECL_RPL (stpncpy, char *,
(char *restrict __dst, char const *restrict __src,
size_t __n)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (stpncpy, char *,
(char *restrict __dst, char const *restrict __src,
size_t __n));
# else
_GL_CXXALIAS_SYS (stpncpy, char *,
(char *restrict __dst, char const *restrict __src,
size_t __n));
# endif
_GL_CXXALIASWARN (stpncpy);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef stpncpy # undef stpncpy
# if HAVE_RAW_DECL_STPNCPY # if HAVE_RAW_DECL_STPNCPY
@@ -181,9 +238,12 @@ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
/* Find the first occurrence of C in S or the final NUL byte. */ /* Find the first occurrence of C in S or the final NUL byte. */
#if @GNULIB_STRCHRNUL@ #if @GNULIB_STRCHRNUL@
# if ! @HAVE_STRCHRNUL@ # if ! @HAVE_STRCHRNUL@
extern char *strchrnul (char const *__s, int __c_in) _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1)); __attribute__ ((__pure__))
_GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (strchrnul, char *, (char const *__s, int __c_in));
_GL_CXXALIASWARN (strchrnul);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strchrnul # undef strchrnul
# if HAVE_RAW_DECL_STRCHRNUL # if HAVE_RAW_DECL_STRCHRNUL
@@ -195,12 +255,19 @@ _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
/* Duplicate S, returning an identical malloc'd string. */ /* Duplicate S, returning an identical malloc'd string. */
#if @GNULIB_STRDUP@ #if @GNULIB_STRDUP@
# if @REPLACE_STRDUP@ # if @REPLACE_STRDUP@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef strdup # undef strdup
# define strdup rpl_strdup # define strdup rpl_strdup
# endif # endif
# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@ _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
extern char *strdup (char const *__s) _GL_ARG_NONNULL ((1)); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
# else
# if !(@HAVE_DECL_STRDUP@ || defined strdup)
_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
# endif
_GL_CXXALIASWARN (strdup);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strdup # undef strdup
# if HAVE_RAW_DECL_STRDUP # if HAVE_RAW_DECL_STRDUP
@@ -212,12 +279,21 @@ _GL_WARN_ON_USE (strdup, "strdup is unportable - "
/* Return a newly allocated copy of at most N bytes of STRING. */ /* Return a newly allocated copy of at most N bytes of STRING. */
#if @GNULIB_STRNDUP@ #if @GNULIB_STRNDUP@
# if @REPLACE_STRNDUP@ # if @REPLACE_STRNDUP@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef strndup # undef strndup
# define strndup rpl_strndup # define strndup rpl_strndup
# endif # endif
# if @REPLACE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
extern char *strndup (char const *__string, size_t __n) _GL_ARG_NONNULL ((1)); _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
# else
# if ! @HAVE_DECL_STRNDUP@
_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
_GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
# endif
_GL_CXXALIASWARN (strndup);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strndup # undef strndup
# if HAVE_RAW_DECL_STRNDUP # if HAVE_RAW_DECL_STRNDUP
@@ -231,9 +307,12 @@ _GL_WARN_ON_USE (strndup, "strndup is unportable - "
return MAXLEN. */ return MAXLEN. */
#if @GNULIB_STRNLEN@ #if @GNULIB_STRNLEN@
# if ! @HAVE_DECL_STRNLEN@ # if ! @HAVE_DECL_STRNLEN@
extern size_t strnlen (char const *__string, size_t __maxlen) _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1)); __attribute__ ((__pure__))
_GL_ARG_NONNULL ((1)));
# endif # endif
_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
_GL_CXXALIASWARN (strnlen);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strnlen # undef strnlen
# if HAVE_RAW_DECL_STRNLEN # if HAVE_RAW_DECL_STRNLEN
@@ -257,9 +336,24 @@ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
/* Find the first occurrence in S of any character in ACCEPT. */ /* Find the first occurrence in S of any character in ACCEPT. */
#if @GNULIB_STRPBRK@ #if @GNULIB_STRPBRK@
# if ! @HAVE_STRPBRK@ # if ! @HAVE_STRPBRK@
extern char *strpbrk (char const *__s, char const *__accept) _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)); __attribute__ ((__pure__))
_GL_ARG_NONNULL ((1, 2)));
# endif # endif
# if defined __SUNPRO_CC
/* This compiler defines an overloaded function
extern "C" { const char * strpbrk (const char *, const char *); }
extern "C++" { inline char * strpbrk (char *, const char *); }
and diagnoses an error
"Error: Could not find a match for std::strpbrk(const char*, const char*)"
*/
_GL_CXXALIAS_SYS_CAST2 (strpbrk,
char *, (char const *__s, char const *__accept),
const char *, (char const *__s, char const *__accept));
# else
_GL_CXXALIAS_SYS (strpbrk, char *, (char const *__s, char const *__accept));
# endif
_GL_CXXALIASWARN (strpbrk);
# if defined GNULIB_POSIXCHECK # if defined GNULIB_POSIXCHECK
/* strpbrk() assumes the second argument is a list of single-byte characters. /* strpbrk() assumes the second argument is a list of single-byte characters.
Even in this simple case, it does not work with multibyte strings if the Even in this simple case, it does not work with multibyte strings if the
@@ -316,9 +410,13 @@ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
See also strtok_r(). */ See also strtok_r(). */
#if @GNULIB_STRSEP@ #if @GNULIB_STRSEP@
# if ! @HAVE_STRSEP@ # if ! @HAVE_STRSEP@
extern char *strsep (char **restrict __stringp, char const *restrict __delim) _GL_FUNCDECL_SYS (strsep, char *,
_GL_ARG_NONNULL ((1, 2)); (char **restrict __stringp, char const *restrict __delim)
_GL_ARG_NONNULL ((1, 2)));
# endif # endif
_GL_CXXALIAS_SYS (strsep, char *,
(char **restrict __stringp, char const *restrict __delim));
_GL_CXXALIASWARN (strsep);
# if defined GNULIB_POSIXCHECK # if defined GNULIB_POSIXCHECK
# undef strsep # undef strsep
_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
@@ -335,10 +433,17 @@ _GL_WARN_ON_USE (strsep, "strsep is unportable - "
#if @GNULIB_STRSTR@ #if @GNULIB_STRSTR@
# if @REPLACE_STRSTR@ # if @REPLACE_STRSTR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define strstr rpl_strstr # define strstr rpl_strstr
extern char *strstr (const char *haystack, const char *needle)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2));
# endif # endif
_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
__attribute__ ((__pure__))
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
# else
_GL_CXXALIAS_SYS (strstr, char *, (const char *haystack, const char *needle));
# endif
_GL_CXXALIASWARN (strstr);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
/* strstr() does not work with multibyte strings if the locale encoding is /* strstr() does not work with multibyte strings if the locale encoding is
different from UTF-8: different from UTF-8:
@@ -357,12 +462,24 @@ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
comparison. */ comparison. */
#if @GNULIB_STRCASESTR@ #if @GNULIB_STRCASESTR@
# if @REPLACE_STRCASESTR@ # if @REPLACE_STRCASESTR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define strcasestr rpl_strcasestr # define strcasestr rpl_strcasestr
# endif # endif
# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ _GL_FUNCDECL_RPL (strcasestr, char *,
extern char *strcasestr (const char *haystack, const char *needle) (const char *haystack, const char *needle)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)); __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (strcasestr, char *,
(const char *haystack, const char *needle));
# else
# if ! @HAVE_STRCASESTR@
_GL_FUNCDECL_SYS (strcasestr, char *,
(const char *haystack, const char *needle)
__attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
# endif # endif
_GL_CXXALIAS_SYS (strcasestr, char *,
(const char *haystack, const char *needle));
# endif
_GL_CXXALIASWARN (strcasestr);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
/* strcasestr() does not work with multibyte strings: /* strcasestr() does not work with multibyte strings:
It is a glibc extension, and glibc implements it only for unibyte It is a glibc extension, and glibc implements it only for unibyte
@@ -401,16 +518,32 @@ _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
See also strsep(). */ See also strsep(). */
#if @GNULIB_STRTOK_R@ #if @GNULIB_STRTOK_R@
# if @REPLACE_STRTOK_R@ # if @REPLACE_STRTOK_R@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef strtok_r # undef strtok_r
# define strtok_r rpl_strtok_r # define strtok_r rpl_strtok_r
# elif @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # endif
_GL_FUNCDECL_RPL (strtok_r, char *,
(char *restrict s, char const *restrict delim,
char **restrict save_ptr)
_GL_ARG_NONNULL ((2, 3)));
_GL_CXXALIAS_RPL (strtok_r, char *,
(char *restrict s, char const *restrict delim,
char **restrict save_ptr));
# else
# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
# undef strtok_r # undef strtok_r
# endif # endif
# if ! @HAVE_DECL_STRTOK_R@ || @REPLACE_STRTOK_R@ # if ! @HAVE_DECL_STRTOK_R@
extern char *strtok_r (char *restrict s, char const *restrict delim, _GL_FUNCDECL_SYS (strtok_r, char *,
(char *restrict s, char const *restrict delim,
char **restrict save_ptr) char **restrict save_ptr)
_GL_ARG_NONNULL ((2, 3)); _GL_ARG_NONNULL ((2, 3)));
# endif # endif
_GL_CXXALIAS_SYS (strtok_r, char *,
(char *restrict s, char const *restrict delim,
char **restrict save_ptr));
# endif
_GL_CXXALIASWARN (strtok_r);
# if defined GNULIB_POSIXCHECK # if defined GNULIB_POSIXCHECK
_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
"strings in multibyte locales - " "strings in multibyte locales - "
@@ -435,15 +568,23 @@ _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
# undef mbslen # undef mbslen
# endif # endif
# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define mbslen rpl_mbslen # define mbslen rpl_mbslen
# endif # endif
extern size_t mbslen (const char *string) _GL_ARG_NONNULL ((1)); _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
# else
_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
# endif
_GL_CXXALIASWARN (mbslen);
#endif #endif
#if @GNULIB_MBSNLEN@ #if @GNULIB_MBSNLEN@
/* Return the number of multibyte characters in the character string starting /* Return the number of multibyte characters in the character string starting
at STRING and ending at STRING + LEN. */ at STRING and ending at STRING + LEN. */
extern size_t mbsnlen (const char *string, size_t len) _GL_ARG_NONNULL ((1)); _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
_GL_ARG_NONNULL ((1));
#endif #endif
#if @GNULIB_MBSCHR@ #if @GNULIB_MBSCHR@
@@ -451,8 +592,19 @@ extern size_t mbsnlen (const char *string, size_t len) _GL_ARG_NONNULL ((1));
and return a pointer to it. Return NULL if C is not found in STRING. and return a pointer to it. Return NULL if C is not found in STRING.
Unlike strchr(), this function works correctly in multibyte locales with Unlike strchr(), this function works correctly in multibyte locales with
encodings such as GB18030. */ encodings such as GB18030. */
# if defined __hpux
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # define mbschr rpl_mbschr /* avoid collision with HP-UX function */
extern char * mbschr (const char *string, int c) _GL_ARG_NONNULL ((1)); # endif
_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
# else
_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
# endif
_GL_CXXALIASWARN (mbschr);
#endif #endif
#if @GNULIB_MBSRCHR@ #if @GNULIB_MBSRCHR@
@@ -460,8 +612,19 @@ extern char * mbschr (const char *string, int c) _GL_ARG_NONNULL ((1));
and return a pointer to it. Return NULL if C is not found in STRING. and return a pointer to it. Return NULL if C is not found in STRING.
Unlike strrchr(), this function works correctly in multibyte locales with Unlike strrchr(), this function works correctly in multibyte locales with
encodings such as GB18030. */ encodings such as GB18030. */
# if defined __hpux
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
extern char * mbsrchr (const char *string, int c) _GL_ARG_NONNULL ((1)); # endif
_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
# else
_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
_GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
# endif
_GL_CXXALIASWARN (mbsrchr);
#endif #endif
#if @GNULIB_MBSSTR@ #if @GNULIB_MBSSTR@
@@ -469,7 +632,7 @@ extern char * mbsrchr (const char *string, int c) _GL_ARG_NONNULL ((1));
string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK.
Unlike strstr(), this function works correctly in multibyte locales with Unlike strstr(), this function works correctly in multibyte locales with
encodings different from UTF-8. */ encodings different from UTF-8. */
extern char * mbsstr (const char *haystack, const char *needle) _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -480,7 +643,7 @@ extern char * mbsstr (const char *haystack, const char *needle)
Note: This function may, in multibyte locales, return 0 for strings of Note: This function may, in multibyte locales, return 0 for strings of
different lengths! different lengths!
Unlike strcasecmp(), this function works correctly in multibyte locales. */ Unlike strcasecmp(), this function works correctly in multibyte locales. */
extern int mbscasecmp (const char *s1, const char *s2) _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -494,7 +657,7 @@ extern int mbscasecmp (const char *s1, const char *s2)
of different lengths! of different lengths!
Unlike strncasecmp(), this function works correctly in multibyte locales. Unlike strncasecmp(), this function works correctly in multibyte locales.
But beware that N is not a byte count but a character count! */ But beware that N is not a byte count but a character count! */
extern int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -508,7 +671,7 @@ extern int mbsncasecmp (const char *s1, const char *s2, size_t n)
smaller length than PREFIX! smaller length than PREFIX!
Unlike strncasecmp(), this function works correctly in multibyte Unlike strncasecmp(), this function works correctly in multibyte
locales. */ locales. */
extern char * mbspcasecmp (const char *string, const char *prefix) _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -518,7 +681,7 @@ extern char * mbspcasecmp (const char *string, const char *prefix)
Note: This function may, in multibyte locales, return success even if Note: This function may, in multibyte locales, return success even if
strlen (haystack) < strlen (needle) ! strlen (haystack) < strlen (needle) !
Unlike strcasestr(), this function works correctly in multibyte locales. */ Unlike strcasestr(), this function works correctly in multibyte locales. */
extern char * mbscasestr (const char *haystack, const char *needle) _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -528,7 +691,7 @@ extern char * mbscasestr (const char *haystack, const char *needle)
beginning of the string to this occurrence, or to the end of the string beginning of the string to this occurrence, or to the end of the string
if none exists. if none exists.
Unlike strcspn(), this function works correctly in multibyte locales. */ Unlike strcspn(), this function works correctly in multibyte locales. */
extern size_t mbscspn (const char *string, const char *accept) _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -537,9 +700,19 @@ extern size_t mbscspn (const char *string, const char *accept)
in the character string ACCEPT. Return the pointer to it, or NULL if none in the character string ACCEPT. Return the pointer to it, or NULL if none
exists. exists.
Unlike strpbrk(), this function works correctly in multibyte locales. */ Unlike strpbrk(), this function works correctly in multibyte locales. */
# if defined __hpux
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
extern char * mbspbrk (const char *string, const char *accept) # endif
_GL_ARG_NONNULL ((1, 2)); _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
# else
_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
_GL_ARG_NONNULL ((1, 2)));
_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
# endif
_GL_CXXALIASWARN (mbspbrk);
#endif #endif
#if @GNULIB_MBSSPN@ #if @GNULIB_MBSSPN@
@@ -548,7 +721,7 @@ extern char * mbspbrk (const char *string, const char *accept)
beginning of the string to this occurrence, or to the end of the string beginning of the string to this occurrence, or to the end of the string
if none exists. if none exists.
Unlike strspn(), this function works correctly in multibyte locales. */ Unlike strspn(), this function works correctly in multibyte locales. */
extern size_t mbsspn (const char *string, const char *reject) _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -567,7 +740,7 @@ extern size_t mbsspn (const char *string, const char *reject)
Caveat: The identity of the delimiting character is lost. Caveat: The identity of the delimiting character is lost.
See also mbstok_r(). */ See also mbstok_r(). */
extern char * mbssep (char **stringp, const char *delim) _GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
_GL_ARG_NONNULL ((1, 2)); _GL_ARG_NONNULL ((1, 2));
#endif #endif
@@ -588,17 +761,23 @@ extern char * mbssep (char **stringp, const char *delim)
Caveat: The identity of the delimiting character is lost. Caveat: The identity of the delimiting character is lost.
See also mbssep(). */ See also mbssep(). */
extern char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
_GL_ARG_NONNULL ((2, 3)); _GL_ARG_NONNULL ((2, 3));
#endif #endif
/* Map any int, typically from errno, into an error message. */ /* Map any int, typically from errno, into an error message. */
#if @GNULIB_STRERROR@ #if @GNULIB_STRERROR@
# if @REPLACE_STRERROR@ # if @REPLACE_STRERROR@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef strerror # undef strerror
# define strerror rpl_strerror # define strerror rpl_strerror
extern char *strerror (int);
# endif # endif
_GL_FUNCDECL_RPL (strerror, char *, (int));
_GL_CXXALIAS_RPL (strerror, char *, (int));
# else
_GL_CXXALIAS_SYS (strerror, char *, (int));
# endif
_GL_CXXALIASWARN (strerror);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strerror # undef strerror
/* Assume strerror is always declared. */ /* Assume strerror is always declared. */
@@ -608,11 +787,20 @@ _GL_WARN_ON_USE (strerror, "strerror is unportable - "
#if @GNULIB_STRSIGNAL@ #if @GNULIB_STRSIGNAL@
# if @REPLACE_STRSIGNAL@ # if @REPLACE_STRSIGNAL@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define strsignal rpl_strsignal # define strsignal rpl_strsignal
# endif # endif
# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ _GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
extern char *strsignal (int __sig); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
# else
# if ! @HAVE_DECL_STRSIGNAL@
_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
# endif # endif
/* Need to cast, because on Cygwin 1.5.x systems, the return type is
'const char *'. */
_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
# endif
_GL_CXXALIASWARN (strsignal);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strsignal # undef strsignal
# if HAVE_RAW_DECL_STRSIGNAL # if HAVE_RAW_DECL_STRSIGNAL
@@ -623,8 +811,11 @@ _GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
#if @GNULIB_STRVERSCMP@ #if @GNULIB_STRVERSCMP@
# if !@HAVE_STRVERSCMP@ # if !@HAVE_STRVERSCMP@
extern int strverscmp (const char *, const char *) _GL_ARG_NONNULL ((1, 2)); _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
_GL_ARG_NONNULL ((1, 2)));
# endif # endif
_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
_GL_CXXALIASWARN (strverscmp);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef strverscmp # undef strverscmp
# if HAVE_RAW_DECL_STRVERSCMP # if HAVE_RAW_DECL_STRVERSCMP
@@ -634,9 +825,5 @@ _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
#endif #endif
#ifdef __cplusplus
}
#endif
#endif /* _GL_STRING_H */ #endif /* _GL_STRING_H */
#endif /* _GL_STRING_H */ #endif /* _GL_STRING_H */

View File

@@ -7,6 +7,7 @@ m4/string_h.m4
Depends-on: Depends-on:
arg-nonnull arg-nonnull
c++defs
extensions extensions
include_next include_next
stddef stddef
@@ -20,7 +21,7 @@ BUILT_SOURCES += string.h
# We need the following in order to create <string.h> when the system # We need the following in order to create <string.h> when the system
# doesn't have one that works with the given compiler. # doesn't have one that works with the given compiler.
string.h: string.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H) string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
$(AM_V_GEN)rm -f $@-t $@ && \ $(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
@@ -88,6 +89,7 @@ string.h: string.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
-e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
< $(srcdir)/string.in.h; \ < $(srcdir)/string.in.h; \