diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-19 21:27:12 (GMT) |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-19 21:27:12 (GMT) |
commit | 26fbe7f1e68bb0c96da32491efcf3696fe6c299b (patch) | |
tree | c4d95289187a64e9c7517bf73d8208026c3d2fb3 /gl/string.in.h | |
parent | 5f79e3e9f62ca5487d9881973149136ba1d19d3e (diff) | |
download | monitoring-plugins-26fbe7f1e68bb0c96da32491efcf3696fe6c299b.tar.gz |
Sync with the latest Gnulib code (6f2d632)
Diffstat (limited to 'gl/string.in.h')
-rw-r--r-- | gl/string.in.h | 160 |
1 files changed, 127 insertions, 33 deletions
diff --git a/gl/string.in.h b/gl/string.in.h index f64fce3..d7a6c9c 100644 --- a/gl/string.in.h +++ b/gl/string.in.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* A GNU-like <string.h>. | 1 | /* A GNU-like <string.h>. |
2 | 2 | ||
3 | Copyright (C) 1995-1996, 2001-2010 Free Software Foundation, Inc. | 3 | Copyright (C) 1995-1996, 2001-2013 Free Software Foundation, Inc. |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
@@ -13,20 +13,20 @@ | |||
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software Foundation, | 16 | along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
17 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | ||
18 | 17 | ||
19 | #ifndef _GL_STRING_H | 18 | #ifndef _@GUARD_PREFIX@_STRING_H |
20 | 19 | ||
21 | #if __GNUC__ >= 3 | 20 | #if __GNUC__ >= 3 |
22 | @PRAGMA_SYSTEM_HEADER@ | 21 | @PRAGMA_SYSTEM_HEADER@ |
23 | #endif | 22 | #endif |
23 | @PRAGMA_COLUMNS@ | ||
24 | 24 | ||
25 | /* The include_next requires a split double-inclusion guard. */ | 25 | /* The include_next requires a split double-inclusion guard. */ |
26 | #@INCLUDE_NEXT@ @NEXT_STRING_H@ | 26 | #@INCLUDE_NEXT@ @NEXT_STRING_H@ |
27 | 27 | ||
28 | #ifndef _GL_STRING_H | 28 | #ifndef _@GUARD_PREFIX@_STRING_H |
29 | #define _GL_STRING_H | 29 | #define _@GUARD_PREFIX@_STRING_H |
30 | 30 | ||
31 | /* NetBSD 5.0 mis-defines NULL. */ | 31 | /* NetBSD 5.0 mis-defines NULL. */ |
32 | #include <stddef.h> | 32 | #include <stddef.h> |
@@ -36,19 +36,20 @@ | |||
36 | # include <wchar.h> | 36 | # include <wchar.h> |
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | #ifndef __attribute__ | 39 | /* The __attribute__ feature is available in gcc versions 2.5 and later. |
40 | /* This feature is available in gcc versions 2.5 and later. */ | 40 | The attribute __pure__ was added in gcc 2.96. */ |
41 | # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) | ||
42 | # define __attribute__(Spec) /* empty */ | ||
43 | # endif | ||
44 | #endif | ||
45 | /* The attribute __pure__ was added in gcc 2.96. */ | ||
46 | #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) | 41 | #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) |
47 | # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) | 42 | # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) |
48 | #else | 43 | #else |
49 | # define _GL_ATTRIBUTE_PURE /* empty */ | 44 | # define _GL_ATTRIBUTE_PURE /* empty */ |
50 | #endif | 45 | #endif |
51 | 46 | ||
47 | /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ | ||
48 | /* But in any case avoid namespace pollution on glibc systems. */ | ||
49 | #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ | ||
50 | && ! defined __GLIBC__ | ||
51 | # include <unistd.h> | ||
52 | #endif | ||
52 | 53 | ||
53 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ | 54 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
54 | 55 | ||
@@ -57,6 +58,36 @@ | |||
57 | /* The definition of _GL_WARN_ON_USE is copied here. */ | 58 | /* The definition of _GL_WARN_ON_USE is copied here. */ |
58 | 59 | ||
59 | 60 | ||
61 | /* Find the index of the least-significant set bit. */ | ||
62 | #if @GNULIB_FFSL@ | ||
63 | # if !@HAVE_FFSL@ | ||
64 | _GL_FUNCDECL_SYS (ffsl, int, (long int i)); | ||
65 | # endif | ||
66 | _GL_CXXALIAS_SYS (ffsl, int, (long int i)); | ||
67 | _GL_CXXALIASWARN (ffsl); | ||
68 | #elif defined GNULIB_POSIXCHECK | ||
69 | # undef ffsl | ||
70 | # if HAVE_RAW_DECL_FFSL | ||
71 | _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); | ||
72 | # endif | ||
73 | #endif | ||
74 | |||
75 | |||
76 | /* Find the index of the least-significant set bit. */ | ||
77 | #if @GNULIB_FFSLL@ | ||
78 | # if !@HAVE_FFSLL@ | ||
79 | _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); | ||
80 | # endif | ||
81 | _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); | ||
82 | _GL_CXXALIASWARN (ffsll); | ||
83 | #elif defined GNULIB_POSIXCHECK | ||
84 | # undef ffsll | ||
85 | # if HAVE_RAW_DECL_FFSLL | ||
86 | _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); | ||
87 | # endif | ||
88 | #endif | ||
89 | |||
90 | |||
60 | /* Return the first instance of C within N bytes of S, or NULL. */ | 91 | /* Return the first instance of C within N bytes of S, or NULL. */ |
61 | #if @GNULIB_MEMCHR@ | 92 | #if @GNULIB_MEMCHR@ |
62 | # if @REPLACE_MEMCHR@ | 93 | # if @REPLACE_MEMCHR@ |
@@ -80,7 +111,7 @@ _GL_CXXALIAS_SYS_CAST2 (memchr, | |||
80 | void *, (void const *__s, int __c, size_t __n), | 111 | void *, (void const *__s, int __c, size_t __n), |
81 | void const *, (void const *__s, int __c, size_t __n)); | 112 | void const *, (void const *__s, int __c, size_t __n)); |
82 | # endif | 113 | # endif |
83 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 114 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
84 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 115 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
85 | _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); | 116 | _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); |
86 | _GL_CXXALIASWARN1 (memchr, void const *, | 117 | _GL_CXXALIASWARN1 (memchr, void const *, |
@@ -165,7 +196,7 @@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) | |||
165 | _GL_CXXALIAS_SYS_CAST2 (memrchr, | 196 | _GL_CXXALIAS_SYS_CAST2 (memrchr, |
166 | void *, (void const *, int, size_t), | 197 | void *, (void const *, int, size_t), |
167 | void const *, (void const *, int, size_t)); | 198 | void const *, (void const *, int, size_t)); |
168 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 199 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
169 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 200 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
170 | _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); | 201 | _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); |
171 | _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); | 202 | _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); |
@@ -195,7 +226,7 @@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) | |||
195 | _GL_CXXALIAS_SYS_CAST2 (rawmemchr, | 226 | _GL_CXXALIAS_SYS_CAST2 (rawmemchr, |
196 | void *, (void const *__s, int __c_in), | 227 | void *, (void const *__s, int __c_in), |
197 | void const *, (void const *__s, int __c_in)); | 228 | void const *, (void const *__s, int __c_in)); |
198 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 229 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
199 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 230 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
200 | _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); | 231 | _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); |
201 | _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); | 232 | _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); |
@@ -233,6 +264,7 @@ _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " | |||
233 | #if @GNULIB_STPNCPY@ | 264 | #if @GNULIB_STPNCPY@ |
234 | # if @REPLACE_STPNCPY@ | 265 | # if @REPLACE_STPNCPY@ |
235 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 266 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
267 | # undef stpncpy | ||
236 | # define stpncpy rpl_stpncpy | 268 | # define stpncpy rpl_stpncpy |
237 | # endif | 269 | # endif |
238 | _GL_FUNCDECL_RPL (stpncpy, char *, | 270 | _GL_FUNCDECL_RPL (stpncpy, char *, |
@@ -274,18 +306,29 @@ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " | |||
274 | 306 | ||
275 | /* Find the first occurrence of C in S or the final NUL byte. */ | 307 | /* Find the first occurrence of C in S or the final NUL byte. */ |
276 | #if @GNULIB_STRCHRNUL@ | 308 | #if @GNULIB_STRCHRNUL@ |
277 | # if ! @HAVE_STRCHRNUL@ | 309 | # if @REPLACE_STRCHRNUL@ |
310 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
311 | # define strchrnul rpl_strchrnul | ||
312 | # endif | ||
313 | _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) | ||
314 | _GL_ATTRIBUTE_PURE | ||
315 | _GL_ARG_NONNULL ((1))); | ||
316 | _GL_CXXALIAS_RPL (strchrnul, char *, | ||
317 | (const char *str, int ch)); | ||
318 | # else | ||
319 | # if ! @HAVE_STRCHRNUL@ | ||
278 | _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) | 320 | _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) |
279 | _GL_ATTRIBUTE_PURE | 321 | _GL_ATTRIBUTE_PURE |
280 | _GL_ARG_NONNULL ((1))); | 322 | _GL_ARG_NONNULL ((1))); |
281 | # endif | 323 | # endif |
282 | /* On some systems, this function is defined as an overloaded function: | 324 | /* On some systems, this function is defined as an overloaded function: |
283 | extern "C++" { const char * std::strchrnul (const char *, int); } | 325 | extern "C++" { const char * std::strchrnul (const char *, int); } |
284 | extern "C++" { char * std::strchrnul (char *, int); } */ | 326 | extern "C++" { char * std::strchrnul (char *, int); } */ |
285 | _GL_CXXALIAS_SYS_CAST2 (strchrnul, | 327 | _GL_CXXALIAS_SYS_CAST2 (strchrnul, |
286 | char *, (char const *__s, int __c_in), | 328 | char *, (char const *__s, int __c_in), |
287 | char const *, (char const *__s, int __c_in)); | 329 | char const *, (char const *__s, int __c_in)); |
288 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 330 | # endif |
331 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ | ||
289 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 332 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
290 | _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); | 333 | _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); |
291 | _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); | 334 | _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); |
@@ -310,6 +353,10 @@ _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " | |||
310 | _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); | 353 | _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); |
311 | _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); | 354 | _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); |
312 | # else | 355 | # else |
356 | # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup | ||
357 | /* strdup exists as a function and as a macro. Get rid of the macro. */ | ||
358 | # undef strdup | ||
359 | # endif | ||
313 | # if !(@HAVE_DECL_STRDUP@ || defined strdup) | 360 | # if !(@HAVE_DECL_STRDUP@ || defined strdup) |
314 | _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); | 361 | _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); |
315 | # endif | 362 | # endif |
@@ -427,7 +474,7 @@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) | |||
427 | _GL_CXXALIAS_SYS_CAST2 (strpbrk, | 474 | _GL_CXXALIAS_SYS_CAST2 (strpbrk, |
428 | char *, (char const *__s, char const *__accept), | 475 | char *, (char const *__s, char const *__accept), |
429 | const char *, (char const *__s, char const *__accept)); | 476 | const char *, (char const *__s, char const *__accept)); |
430 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 477 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
431 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 478 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
432 | _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); | 479 | _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); |
433 | _GL_CXXALIASWARN1 (strpbrk, char const *, | 480 | _GL_CXXALIASWARN1 (strpbrk, char const *, |
@@ -529,7 +576,7 @@ _GL_CXXALIAS_SYS_CAST2 (strstr, | |||
529 | char *, (const char *haystack, const char *needle), | 576 | char *, (const char *haystack, const char *needle), |
530 | const char *, (const char *haystack, const char *needle)); | 577 | const char *, (const char *haystack, const char *needle)); |
531 | # endif | 578 | # endif |
532 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 579 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
533 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 580 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
534 | _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); | 581 | _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); |
535 | _GL_CXXALIASWARN1 (strstr, const char *, | 582 | _GL_CXXALIASWARN1 (strstr, const char *, |
@@ -578,7 +625,7 @@ _GL_CXXALIAS_SYS_CAST2 (strcasestr, | |||
578 | char *, (const char *haystack, const char *needle), | 625 | char *, (const char *haystack, const char *needle), |
579 | const char *, (const char *haystack, const char *needle)); | 626 | const char *, (const char *haystack, const char *needle)); |
580 | # endif | 627 | # endif |
581 | # if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \ | 628 | # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ |
582 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | 629 | && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) |
583 | _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); | 630 | _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); |
584 | _GL_CXXALIASWARN1 (strcasestr, const char *, | 631 | _GL_CXXALIASWARN1 (strcasestr, const char *, |
@@ -677,10 +724,14 @@ _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " | |||
677 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 724 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
678 | # define mbslen rpl_mbslen | 725 | # define mbslen rpl_mbslen |
679 | # endif | 726 | # endif |
680 | _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); | 727 | _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) |
728 | _GL_ATTRIBUTE_PURE | ||
729 | _GL_ARG_NONNULL ((1))); | ||
681 | _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); | 730 | _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); |
682 | # else | 731 | # else |
683 | _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); | 732 | _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) |
733 | _GL_ATTRIBUTE_PURE | ||
734 | _GL_ARG_NONNULL ((1))); | ||
684 | _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); | 735 | _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); |
685 | # endif | 736 | # endif |
686 | _GL_CXXALIASWARN (mbslen); | 737 | _GL_CXXALIASWARN (mbslen); |
@@ -690,6 +741,7 @@ _GL_CXXALIASWARN (mbslen); | |||
690 | /* Return the number of multibyte characters in the character string starting | 741 | /* Return the number of multibyte characters in the character string starting |
691 | at STRING and ending at STRING + LEN. */ | 742 | at STRING and ending at STRING + LEN. */ |
692 | _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) | 743 | _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) |
744 | _GL_ATTRIBUTE_PURE | ||
693 | _GL_ARG_NONNULL ((1)); | 745 | _GL_ARG_NONNULL ((1)); |
694 | #endif | 746 | #endif |
695 | 747 | ||
@@ -703,10 +755,12 @@ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) | |||
703 | # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ | 755 | # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ |
704 | # endif | 756 | # endif |
705 | _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) | 757 | _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) |
758 | _GL_ATTRIBUTE_PURE | ||
706 | _GL_ARG_NONNULL ((1))); | 759 | _GL_ARG_NONNULL ((1))); |
707 | _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); | 760 | _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); |
708 | # else | 761 | # else |
709 | _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) | 762 | _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) |
763 | _GL_ATTRIBUTE_PURE | ||
710 | _GL_ARG_NONNULL ((1))); | 764 | _GL_ARG_NONNULL ((1))); |
711 | _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); | 765 | _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); |
712 | # endif | 766 | # endif |
@@ -718,15 +772,17 @@ _GL_CXXALIASWARN (mbschr); | |||
718 | and return a pointer to it. Return NULL if C is not found in STRING. | 772 | and return a pointer to it. Return NULL if C is not found in STRING. |
719 | Unlike strrchr(), this function works correctly in multibyte locales with | 773 | Unlike strrchr(), this function works correctly in multibyte locales with |
720 | encodings such as GB18030. */ | 774 | encodings such as GB18030. */ |
721 | # if defined __hpux | 775 | # if defined __hpux || defined __INTERIX |
722 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 776 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
723 | # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ | 777 | # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ |
724 | # endif | 778 | # endif |
725 | _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) | 779 | _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) |
780 | _GL_ATTRIBUTE_PURE | ||
726 | _GL_ARG_NONNULL ((1))); | 781 | _GL_ARG_NONNULL ((1))); |
727 | _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); | 782 | _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); |
728 | # else | 783 | # else |
729 | _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) | 784 | _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) |
785 | _GL_ATTRIBUTE_PURE | ||
730 | _GL_ARG_NONNULL ((1))); | 786 | _GL_ARG_NONNULL ((1))); |
731 | _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); | 787 | _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); |
732 | # endif | 788 | # endif |
@@ -739,6 +795,7 @@ _GL_CXXALIASWARN (mbsrchr); | |||
739 | Unlike strstr(), this function works correctly in multibyte locales with | 795 | Unlike strstr(), this function works correctly in multibyte locales with |
740 | encodings different from UTF-8. */ | 796 | encodings different from UTF-8. */ |
741 | _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) | 797 | _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) |
798 | _GL_ATTRIBUTE_PURE | ||
742 | _GL_ARG_NONNULL ((1, 2)); | 799 | _GL_ARG_NONNULL ((1, 2)); |
743 | #endif | 800 | #endif |
744 | 801 | ||
@@ -750,6 +807,7 @@ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) | |||
750 | different lengths! | 807 | different lengths! |
751 | Unlike strcasecmp(), this function works correctly in multibyte locales. */ | 808 | Unlike strcasecmp(), this function works correctly in multibyte locales. */ |
752 | _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) | 809 | _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) |
810 | _GL_ATTRIBUTE_PURE | ||
753 | _GL_ARG_NONNULL ((1, 2)); | 811 | _GL_ARG_NONNULL ((1, 2)); |
754 | #endif | 812 | #endif |
755 | 813 | ||
@@ -764,20 +822,21 @@ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) | |||
764 | Unlike strncasecmp(), this function works correctly in multibyte locales. | 822 | Unlike strncasecmp(), this function works correctly in multibyte locales. |
765 | But beware that N is not a byte count but a character count! */ | 823 | But beware that N is not a byte count but a character count! */ |
766 | _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) | 824 | _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) |
825 | _GL_ATTRIBUTE_PURE | ||
767 | _GL_ARG_NONNULL ((1, 2)); | 826 | _GL_ARG_NONNULL ((1, 2)); |
768 | #endif | 827 | #endif |
769 | 828 | ||
770 | #if @GNULIB_MBSPCASECMP@ | 829 | #if @GNULIB_MBSPCASECMP@ |
771 | /* Compare the initial segment of the character string STRING consisting of | 830 | /* Compare the initial segment of the character string STRING consisting of |
772 | at most mbslen (PREFIX) characters with the character string PREFIX, | 831 | at most mbslen (PREFIX) characters with the character string PREFIX, |
773 | ignoring case, returning less than, equal to or greater than zero if this | 832 | ignoring case. If the two match, return a pointer to the first byte |
774 | initial segment is lexicographically less than, equal to or greater than | 833 | after this prefix in STRING. Otherwise, return NULL. |
775 | PREFIX. | 834 | Note: This function may, in multibyte locales, return non-NULL if STRING |
776 | Note: This function may, in multibyte locales, return 0 if STRING is of | 835 | is of smaller length than PREFIX! |
777 | smaller length than PREFIX! | ||
778 | Unlike strncasecmp(), this function works correctly in multibyte | 836 | Unlike strncasecmp(), this function works correctly in multibyte |
779 | locales. */ | 837 | locales. */ |
780 | _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) | 838 | _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) |
839 | _GL_ATTRIBUTE_PURE | ||
781 | _GL_ARG_NONNULL ((1, 2)); | 840 | _GL_ARG_NONNULL ((1, 2)); |
782 | #endif | 841 | #endif |
783 | 842 | ||
@@ -788,6 +847,7 @@ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) | |||
788 | strlen (haystack) < strlen (needle) ! | 847 | strlen (haystack) < strlen (needle) ! |
789 | Unlike strcasestr(), this function works correctly in multibyte locales. */ | 848 | Unlike strcasestr(), this function works correctly in multibyte locales. */ |
790 | _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) | 849 | _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) |
850 | _GL_ATTRIBUTE_PURE | ||
791 | _GL_ARG_NONNULL ((1, 2)); | 851 | _GL_ARG_NONNULL ((1, 2)); |
792 | #endif | 852 | #endif |
793 | 853 | ||
@@ -798,6 +858,7 @@ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) | |||
798 | if none exists. | 858 | if none exists. |
799 | Unlike strcspn(), this function works correctly in multibyte locales. */ | 859 | Unlike strcspn(), this function works correctly in multibyte locales. */ |
800 | _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) | 860 | _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) |
861 | _GL_ATTRIBUTE_PURE | ||
801 | _GL_ARG_NONNULL ((1, 2)); | 862 | _GL_ARG_NONNULL ((1, 2)); |
802 | #endif | 863 | #endif |
803 | 864 | ||
@@ -811,10 +872,12 @@ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) | |||
811 | # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ | 872 | # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ |
812 | # endif | 873 | # endif |
813 | _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) | 874 | _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) |
875 | _GL_ATTRIBUTE_PURE | ||
814 | _GL_ARG_NONNULL ((1, 2))); | 876 | _GL_ARG_NONNULL ((1, 2))); |
815 | _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); | 877 | _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); |
816 | # else | 878 | # else |
817 | _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) | 879 | _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) |
880 | _GL_ATTRIBUTE_PURE | ||
818 | _GL_ARG_NONNULL ((1, 2))); | 881 | _GL_ARG_NONNULL ((1, 2))); |
819 | _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); | 882 | _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); |
820 | # endif | 883 | # endif |
@@ -828,6 +891,7 @@ _GL_CXXALIASWARN (mbspbrk); | |||
828 | if none exists. | 891 | if none exists. |
829 | Unlike strspn(), this function works correctly in multibyte locales. */ | 892 | Unlike strspn(), this function works correctly in multibyte locales. */ |
830 | _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) | 893 | _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) |
894 | _GL_ATTRIBUTE_PURE | ||
831 | _GL_ARG_NONNULL ((1, 2)); | 895 | _GL_ARG_NONNULL ((1, 2)); |
832 | #endif | 896 | #endif |
833 | 897 | ||
@@ -891,6 +955,35 @@ _GL_WARN_ON_USE (strerror, "strerror is unportable - " | |||
891 | "use gnulib module strerror to guarantee non-NULL result"); | 955 | "use gnulib module strerror to guarantee non-NULL result"); |
892 | #endif | 956 | #endif |
893 | 957 | ||
958 | /* Map any int, typically from errno, into an error message. Multithread-safe. | ||
959 | Uses the POSIX declaration, not the glibc declaration. */ | ||
960 | #if @GNULIB_STRERROR_R@ | ||
961 | # if @REPLACE_STRERROR_R@ | ||
962 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
963 | # undef strerror_r | ||
964 | # define strerror_r rpl_strerror_r | ||
965 | # endif | ||
966 | _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) | ||
967 | _GL_ARG_NONNULL ((2))); | ||
968 | _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); | ||
969 | # else | ||
970 | # if !@HAVE_DECL_STRERROR_R@ | ||
971 | _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) | ||
972 | _GL_ARG_NONNULL ((2))); | ||
973 | # endif | ||
974 | _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); | ||
975 | # endif | ||
976 | # if @HAVE_DECL_STRERROR_R@ | ||
977 | _GL_CXXALIASWARN (strerror_r); | ||
978 | # endif | ||
979 | #elif defined GNULIB_POSIXCHECK | ||
980 | # undef strerror_r | ||
981 | # if HAVE_RAW_DECL_STRERROR_R | ||
982 | _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " | ||
983 | "use gnulib module strerror_r-posix for portability"); | ||
984 | # endif | ||
985 | #endif | ||
986 | |||
894 | #if @GNULIB_STRSIGNAL@ | 987 | #if @GNULIB_STRSIGNAL@ |
895 | # if @REPLACE_STRSIGNAL@ | 988 | # if @REPLACE_STRSIGNAL@ |
896 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | 989 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
@@ -918,6 +1011,7 @@ _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " | |||
918 | #if @GNULIB_STRVERSCMP@ | 1011 | #if @GNULIB_STRVERSCMP@ |
919 | # if !@HAVE_STRVERSCMP@ | 1012 | # if !@HAVE_STRVERSCMP@ |
920 | _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) | 1013 | _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) |
1014 | _GL_ATTRIBUTE_PURE | ||
921 | _GL_ARG_NONNULL ((1, 2))); | 1015 | _GL_ARG_NONNULL ((1, 2))); |
922 | # endif | 1016 | # endif |
923 | _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); | 1017 | _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); |
@@ -931,5 +1025,5 @@ _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " | |||
931 | #endif | 1025 | #endif |
932 | 1026 | ||
933 | 1027 | ||
934 | #endif /* _GL_STRING_H */ | 1028 | #endif /* _@GUARD_PREFIX@_STRING_H */ |
935 | #endif /* _GL_STRING_H */ | 1029 | #endif /* _@GUARD_PREFIX@_STRING_H */ |