diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | debug/tst-chk1.c | 1 | ||||
-rw-r--r-- | include/bits/strings_x2k8.h | 1 | ||||
-rwxr-xr-x | scripts/check-obsolete-constructs.py | 1 | ||||
-rw-r--r-- | string/Makefile | 2 | ||||
-rw-r--r-- | string/bits/strings_x2k8.h | 70 | ||||
-rw-r--r-- | string/string.h | 2 | ||||
-rw-r--r-- | string/strings.h | 39 | ||||
-rw-r--r-- | string/test-string.h | 1 | ||||
-rw-r--r-- | sysdeps/i386/i686/multiarch/bcopy.c | 1 | ||||
-rw-r--r-- | sysdeps/i386/i686/multiarch/bzero.c | 1 | ||||
-rw-r--r-- | sysdeps/i386/i686/multiarch/ifunc-impl-list.c | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/bcopy.c | 1 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c | 1 | ||||
-rw-r--r-- | sysdeps/s390/bzero.c | 1 | ||||
-rw-r--r-- | sysdeps/s390/multiarch/ifunc-impl-list.c | 1 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/multiarch/bzero.c | 1 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c | 1 |
20 files changed, 91 insertions, 40 deletions
diff --git a/NEWS b/NEWS index 599db8f4f9..93be478f33 100644 --- a/NEWS +++ b/NEWS @@ -187,6 +187,9 @@ Deprecated and removed features, and other changes affecting compatibility: * The obsolete and never-implemented XSI STREAMS header files <stropts.h> and <sys/stropts.h> have been removed. +* The obsolete functions bcmp, bcopy, bzero, index, and rindex are no + longer declared in <string.h>, only <strings.h>. + * The typedefs u_int8_t, u_int16_t, u_int32_t, u_int64_t, and register_t are no longer defined by <sys/types.h> in strict conformance modes. These types were historically provided by <sys/types.h> on BSD systems, diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c index 5d02592978..ae7d0c289a 100644 --- a/debug/tst-chk1.c +++ b/debug/tst-chk1.c @@ -30,6 +30,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <strings.h> #include <unistd.h> #include <wchar.h> #include <sys/poll.h> diff --git a/include/bits/strings_x2k8.h b/include/bits/strings_x2k8.h new file mode 100644 index 0000000000..7eddd92d93 --- /dev/null +++ b/include/bits/strings_x2k8.h @@ -0,0 +1 @@ +#include <string/bits/strings_x2k8.h> diff --git a/scripts/check-obsolete-constructs.py b/scripts/check-obsolete-constructs.py index 77253dfb1d..dfe0d0fff5 100755 --- a/scripts/check-obsolete-constructs.py +++ b/scripts/check-obsolete-constructs.py @@ -506,7 +506,6 @@ HEADER_ALLOWED_INCLUDES = { "inttypes.h": [ "stdint.h" ], "signal.h": [ "sys/ucontext.h" ], "stdlib.h": [ "alloca.h", "sys/types.h" ], - "string.h": [ "strings.h" ], "tgmath.h": [ "complex.h", "math.h" ], "threads.h": [ "time.h" ], diff --git a/string/Makefile b/string/Makefile index c46785f1a1..d9503bd2b3 100644 --- a/string/Makefile +++ b/string/Makefile @@ -23,7 +23,7 @@ subdir := string include ../Makeconfig headers := string.h bits/string_fortified.h \ - strings.h bits/strings_fortified.h \ + strings.h bits/strings_x2k8.h bits/strings_fortified.h \ byteswap.h bits/byteswap.h \ endian.h bits/endian.h bits/endianness.h \ bits/uintn-identity.h \ diff --git a/string/bits/strings_x2k8.h b/string/bits/strings_x2k8.h new file mode 100644 index 0000000000..dbcb0b2c31 --- /dev/null +++ b/string/bits/strings_x2k8.h @@ -0,0 +1,70 @@ +/* Copyright (C) 2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _BITS_STRINGS_X2K8_H +#define _BITS_STRINGS_X2K8_H 1 + +/* This header file declares all of the strings.h functions that are + not marked as "obsolete" in POSIX.1-2008. As a GNU extension, + these functions are also made available via string.h. */ + +#if !defined _STRING_H && !defined _STRINGS_H +# error "Never include <bits/strings_x2k8.h> directly, use <string(s).h>." +#endif + +__BEGIN_DECLS + +/* Compare S1 and S2, ignoring case. */ +extern int strcasecmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include <bits/types/locale_t.h> + +/* Compare S1 and S2, ignoring case, using collation rules from LOC. */ +extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 3)); + +/* Compare no more than N chars of S1 and S2, ignoring case, using + collation rules from LOC. */ +extern int strncasecmp_l (const char *__s1, const char *__s2, + size_t __n, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 4)); +#endif + +#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI +/* Return the position of the first bit set in I, or 0 if none are set. + The least-significant bit is position 1, the most-significant 32. */ +extern int ffs (int __i) __THROW __attribute_const__; +#endif + +/* The following two functions are non-standard but necessary for non-32 bit + platforms. */ +#ifdef __USE_MISC +extern int ffsl (long int __l) __THROW __attribute_const__; +__extension__ extern int ffsll (long long int __ll) + __THROW __attribute_const__; +#endif + +__END_DECLS + +#endif /* bits/strings_x2k8.h */ diff --git a/string/string.h b/string/string.h index 234ee91d4a..fcb7da84ec 100644 --- a/string/string.h +++ b/string/string.h @@ -427,7 +427,7 @@ extern char *strerror_l (int __errnum, locale_t __l) __THROW; #endif #ifdef __USE_MISC -# include <strings.h> +# include <bits/strings_x2k8.h> /* Set N bytes of S to 0. The compiler will not delete a call to this function, even if S is dead after the call. */ diff --git a/string/strings.h b/string/strings.h index 65dfca8935..540eb1514f 100644 --- a/string/strings.h +++ b/string/strings.h @@ -21,6 +21,8 @@ #include <features.h> #include <bits/types/size_t.h> +#include <bits/strings_x2k8.h> + /* Tell the caller that we provide correct C++ prototypes. */ #if defined __cplusplus && __GNUC_PREREQ (4, 4) # define __CORRECT_ISO_CPP_STRINGS_H_PROTO @@ -97,43 +99,6 @@ extern char *rindex (const char *__s, int __c) # endif #endif -#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI -/* Return the position of the first bit set in I, or 0 if none are set. - The least-significant bit is position 1, the most-significant 32. */ -extern int ffs (int __i) __THROW __attribute_const__; -#endif - -/* The following two functions are non-standard but necessary for non-32 bit - platforms. */ -# ifdef __USE_MISC -extern int ffsl (long int __l) __THROW __attribute_const__; -__extension__ extern int ffsll (long long int __ll) - __THROW __attribute_const__; -# endif - -/* Compare S1 and S2, ignoring case. */ -extern int strcasecmp (const char *__s1, const char *__s2) - __THROW __attribute_pure__ __nonnull ((1, 2)); - -/* Compare no more than N chars of S1 and S2, ignoring case. */ -extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) - __THROW __attribute_pure__ __nonnull ((1, 2)); - -#ifdef __USE_XOPEN2K8 -/* POSIX.1-2008 extended locale interface (see locale.h). */ -# include <bits/types/locale_t.h> - -/* Compare S1 and S2, ignoring case, using collation rules from LOC. */ -extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) - __THROW __attribute_pure__ __nonnull ((1, 2, 3)); - -/* Compare no more than N chars of S1 and S2, ignoring case, using - collation rules from LOC. */ -extern int strncasecmp_l (const char *__s1, const char *__s2, - size_t __n, locale_t __loc) - __THROW __attribute_pure__ __nonnull ((1, 2, 4)); -#endif - __END_DECLS #if __GNUC_PREREQ (3,4) && __USE_FORTIFY_LEVEL > 0 \ diff --git a/string/test-string.h b/string/test-string.h index 0efe5d870e..a6d8d1eb80 100644 --- a/string/test-string.h +++ b/string/test-string.h @@ -55,6 +55,7 @@ extern impl_t __start_impls[], __stop_impls[]; #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <strings.h> #include <sys/mman.h> #include <sys/param.h> #include <unistd.h> diff --git a/sysdeps/i386/i686/multiarch/bcopy.c b/sysdeps/i386/i686/multiarch/bcopy.c index 2145ab7e69..929dc70321 100644 --- a/sysdeps/i386/i686/multiarch/bcopy.c +++ b/sysdeps/i386/i686/multiarch/bcopy.c @@ -21,6 +21,7 @@ #if IS_IN (libc) # define bcopy __redirect_bcopy # include <string.h> +# include <strings.h> # undef bcopy # define SYMBOL_NAME bcopy diff --git a/sysdeps/i386/i686/multiarch/bzero.c b/sysdeps/i386/i686/multiarch/bzero.c index 3b68e1c113..3655262f1b 100644 --- a/sysdeps/i386/i686/multiarch/bzero.c +++ b/sysdeps/i386/i686/multiarch/bzero.c @@ -21,6 +21,7 @@ #if IS_IN (libc) # define bzero __redirect_bzero # include <string.h> +# include <strings.h> # undef bzero # define SYMBOL_NAME bzero diff --git a/sysdeps/i386/i686/multiarch/ifunc-impl-list.c b/sysdeps/i386/i686/multiarch/ifunc-impl-list.c index 23774fbe8a..8101c0a2db 100644 --- a/sysdeps/i386/i686/multiarch/ifunc-impl-list.c +++ b/sysdeps/i386/i686/multiarch/ifunc-impl-list.c @@ -18,6 +18,7 @@ #include <assert.h> #include <string.h> +#include <strings.h> #include <wchar.h> #include <ifunc-impl-list.h> #include "init-arch.h" diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c index fca6c2cbef..07de0a96ab 100644 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c @@ -18,6 +18,7 @@ #include <assert.h> #include <string.h> +#include <strings.h> #include <wchar.h> #include <ldsodefs.h> #include <ifunc-impl-list.h> diff --git a/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c index 0851afa313..4b530cdb6d 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c +++ b/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c @@ -17,6 +17,7 @@ <https://www.gnu.org/licenses/>. */ #include <string.h> +#include <strings.h> extern __typeof (bcopy) __bcopy_ppc attribute_hidden; extern __typeof (memmove) __memmove_ppc attribute_hidden; diff --git a/sysdeps/powerpc/powerpc64/multiarch/bcopy.c b/sysdeps/powerpc/powerpc64/multiarch/bcopy.c index 2aebfc0a8e..1a7c9099d9 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/bcopy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/bcopy.c @@ -17,6 +17,7 @@ <https://www.gnu.org/licenses/>. */ #include <string.h> +#include <strings.h> #include "init-arch.h" extern __typeof (bcopy) __bcopy_ppc attribute_hidden; diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c index b9fef3f43c..41d133051d 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c @@ -18,6 +18,7 @@ #include <assert.h> #include <string.h> +#include <strings.h> #include <wchar.h> #include <ldsodefs.h> #include <ifunc-impl-list.h> diff --git a/sysdeps/s390/bzero.c b/sysdeps/s390/bzero.c index fc0d46e2e1..fc641e12fc 100644 --- a/sysdeps/s390/bzero.c +++ b/sysdeps/s390/bzero.c @@ -19,6 +19,7 @@ #include <ifunc-memset.h> #if HAVE_MEMSET_IFUNC # include <string.h> +# include <strings.h> # include <ifunc-resolve.h> # if HAVE_MEMSET_Z900_G5 diff --git a/sysdeps/s390/multiarch/ifunc-impl-list.c b/sysdeps/s390/multiarch/ifunc-impl-list.c index e6195c6e26..0d94949145 100644 --- a/sysdeps/s390/multiarch/ifunc-impl-list.c +++ b/sysdeps/s390/multiarch/ifunc-impl-list.c @@ -18,6 +18,7 @@ #include <assert.h> #include <string.h> +#include <strings.h> #include <wchar.h> #include <ifunc-impl-list.h> #include <ifunc-resolve.h> diff --git a/sysdeps/sparc/sparc64/multiarch/bzero.c b/sysdeps/sparc/sparc64/multiarch/bzero.c index ee501502aa..fc7af26d84 100644 --- a/sysdeps/sparc/sparc64/multiarch/bzero.c +++ b/sysdeps/sparc/sparc64/multiarch/bzero.c @@ -20,6 +20,7 @@ #if IS_IN (libc) # define bzero __redirect_bzero # include <string.h> +# include <strings.h> # undef bzero # include <sparc-ifunc.h> diff --git a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c index ad79a26169..2fa7a3a9ef 100644 --- a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c +++ b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c @@ -18,6 +18,7 @@ #include <assert.h> #include <string.h> +#include <strings.h> #include <wchar.h> #include <ldsodefs.h> #include <sysdep.h> |