]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Don’t include sys/cdefs.h directly from public headers.
authorZack Weinberg <zackw@panix.com>
Tue, 18 Jun 2019 15:47:49 +0000 (11:47 -0400)
committerZack Weinberg <zackw@panix.com>
Wed, 8 Jan 2020 18:04:44 +0000 (13:04 -0500)
The convention throughout glibc is that every public header includes
features.h directly, as its first action, and relies on features.h to
include sys/cdefs.h.  In a few places, though, it’s been done the
other way around, usually in headers that were copied from a BSD
source (where the convention is exactly the opposite).  This patch
makes all installed headers match the glibc convention.

This patch also corrects a bug in glob.h: it may declare size_t
without notifying stddef.h that it has done this, so e.g.

    #define _XOPEN_SOURCE 700
    #include <glob.h>
    #include <stddef.h>
    int dummy;

declares size_t twice, which is invalid prior to C2011.  I wasn’t able
to persuade gcc 8 to issue an error, even with -std=c89 -Wsystem-headers,
but clang is not so lenient.

* posix/glob.h: Include features.h, not sys/cdefs.h.
When __USE_XOPEN || USE_XOPEN2K8, include stddef.h for size_t;
otherwise, issue an immediate #error if __SIZE_TYPE__ is not
available. Use __gsize_t, not __size_t, as an impl-namespace
alternative name for size_t.
* conform/data/glob.h-data: Adjust to match.

* inet/netinet/igmp.h, mach/lock-intern.h, misc/ar.h
* misc/sys/auxv.h, resolv/resolv.h, socket/sys/un.h
* sunrpc/rpc/auth_des.h, sunrpc/rpc/rpc_msg.h
* sysdeps/generic/memcopy.h, sysdeps/generic/netinet/tcp.h
* sysdeps/htl/pthread.h, sysdeps/mach/hurd/net/ethernet.h
* sysdeps/mach/hurd/net/if_arp.h: Include features.h, not sys/cdefs.h.

* scripts/check-obsolete-constructs.py (HEADER_ALLOWED_INCLUDES):
        Update.

16 files changed:
conform/data/glob.h-data
inet/netinet/igmp.h
mach/lock-intern.h
misc/ar.h
misc/sys/auxv.h
posix/glob.h
resolv/resolv.h
scripts/check-obsolete-constructs.py
socket/sys/un.h
sunrpc/rpc/auth_des.h
sunrpc/rpc/rpc_msg.h
sysdeps/generic/memcopy.h
sysdeps/generic/netinet/tcp.h
sysdeps/htl/pthread.h
sysdeps/mach/hurd/net/ethernet.h
sysdeps/mach/hurd/net/if_arp.h

index eca83937af8af9401b2796012e0ef7f5edb59f8d..6268134b351b188bd01c07100bed143ea1597e49 100644 (file)
@@ -1,6 +1,6 @@
 #if !defined ISO && !defined ISO99 && !defined ISO11
 #ifdef POSIX
-# define size_t __size_t
+# define size_t __gsize_t
 #endif
 
 type glob_t
index 2c3f16794610dad83df1c9521efba01ee72fb36b..3a5b157073237a9dcdf8725eecd949593e7f3090 100644 (file)
@@ -18,7 +18,8 @@
 #ifndef _NETINET_IGMP_H
 #define        _NETINET_IGMP_H 1
 
-#include <sys/cdefs.h>
+#include <features.h>
+
 #include <sys/types.h>
 
 #ifdef __USE_MISC
index b6a075bc3a610e59c152a6d95c62d75d95af50c7..357860c8364f23fe8a6f6368e7014308aaeae19f 100644 (file)
@@ -18,7 +18,8 @@
 #ifndef _LOCK_INTERN_H
 #define        _LOCK_INTERN_H
 
-#include <sys/cdefs.h>
+#include <features.h>
+
 #if defined __USE_EXTERN_INLINES && defined _LIBC
 # include <lowlevellock.h>
 #endif
index 85ecba604c8fbc16472ecc2650fac5be4bc7f9bf..8dcef44a9d1cde2f681ee3d41d73987775e98701 100644 (file)
--- a/misc/ar.h
+++ b/misc/ar.h
@@ -19,7 +19,7 @@
 #ifndef _AR_H
 #define _AR_H 1
 
-#include <sys/cdefs.h>
+#include <features.h>
 
 /* Archive files start with the ARMAG identifying string.  Then follows a
    `struct ar_hdr', and as many bytes of member file data as its `ar_size'
index 1a563e1337e64e4218c1613b68dc2551a762ba00..038bbbe255d9d162fd5f017fd3c3c07760ab3e49 100644 (file)
@@ -19,8 +19,9 @@
 #ifndef _SYS_AUXV_H
 #define _SYS_AUXV_H 1
 
+#include <features.h>
+
 #include <elf.h>
-#include <sys/cdefs.h>
 #include <bits/hwcap.h>
 
 __BEGIN_DECLS
index b82a28286acfb88376c6fc20b2542c24867de2ff..e647ba813a1615d250cf5930baf90717ac9b1880 100644 (file)
 #ifndef        _GLOB_H
 #define        _GLOB_H 1
 
-#include <sys/cdefs.h>
+#include <features.h>
 
 __BEGIN_DECLS
 
-/* We need `size_t' for the following definitions.  */
-#ifndef __size_t
-typedef __SIZE_TYPE__ __size_t;
-# if defined __USE_XOPEN || defined __USE_XOPEN2K8
-typedef __SIZE_TYPE__ size_t;
-# endif
+/* Structures below have size_t fields, but this header is not supposed to
+   define size_t itself, unless XSI or POSIX.1-2008 features are active.
+   We can't use __size_t as an alternative name, as we do for most types
+   with this kind of constraint, because GCC's stddef.h uses __size_t for
+   a different purpose.  */
+
+#if defined __USE_XOPEN || defined __USE_XOPEN2K8
+# define __need_size_t
+# include <stddef.h>
+typedef size_t __gsize_t;
+#elif defined __SIZE_TYPE__
+typedef __SIZE_TYPE__ __gsize_t;
 #else
-/* The GNU CC stddef.h version defines __size_t as empty.  We need a real
-   definition.  */
-# undef __size_t
-# define __size_t size_t
+# error "Don't know how to define __gsize_t"
 #endif
 
 /* Bits set in the FLAGS argument to `glob'.  */
@@ -81,9 +84,9 @@ struct stat;
 #endif
 typedef struct
   {
-    __size_t gl_pathc;         /* Count of paths matched by the pattern.  */
+    __gsize_t gl_pathc;                /* Count of paths matched by the pattern.  */
     char **gl_pathv;           /* List of matched pathnames.  */
-    __size_t gl_offs;          /* Slots to reserve in `gl_pathv'.  */
+    __gsize_t gl_offs;         /* Slots to reserve in `gl_pathv'.  */
     int gl_flags;              /* Set to FLAGS, maybe | GLOB_MAGCHAR.  */
 
     /* If the GLOB_ALTDIRFUNC flag is set, the following functions
@@ -110,9 +113,9 @@ struct stat64;
 # endif
 typedef struct
   {
-    __size_t gl_pathc;
+    __gsize_t gl_pathc;
     char **gl_pathv;
-    __size_t gl_offs;
+    __gsize_t gl_offs;
     int gl_flags;
 
     /* If the GLOB_ALTDIRFUNC flag is set, the following functions
index a039a9e636b286bf536b908602d33d1fa1671d6c..ce3922c3ed3aa78fc99533c30acd5db53dab0b18 100644 (file)
@@ -52,7 +52,8 @@
 #ifndef _RESOLV_H_
 #define _RESOLV_H_
 
-#include <sys/cdefs.h>
+#include <features.h>
+
 #include <sys/param.h>
 #include <sys/types.h>
 #include <stdio.h>
index 1d9eec5d0ebec5993f8da314778039d6515748c8..25c0d6868d6e49f5dc3b9603fc44705f30fe8906 100755 (executable)
@@ -527,11 +527,9 @@ HEADER_ALLOWED_INCLUDES = {
     #           spawn.h -> sched.h
     "aio.h":                       [ "sys/types.h" ],
     "ftw.h":                       [ "sys/stat.h", "sys/types.h" ],
-    "glob.h":                      [ "sys/cdefs.h" ],
     "langinfo.h":                  [ "nl_types.h" ],
     "mqueue.h":                    [ "fcntl.h", "sys/types.h" ],
-    "pthread.h":                   [ "endian.h", "sched.h", "time.h",
-                                     "sys/cdefs.h" ],
+    "pthread.h":                   [ "sched.h", "time.h" ],
     "regex.h":                     [ "limits.h", "sys/types.h" ],
     "sched.h":                     [ "time.h" ],
     "semaphore.h":                 [ "sys/types.h" ],
@@ -550,7 +548,7 @@ HEADER_ALLOWED_INCLUDES = {
     "sys/time.h":                  [ "sys/select.h" ],
     "sys/types.h":                 [ "endian.h", "sys/select.h" ],
     "sys/uio.h":                   [ "sys/types.h" ],
-    "sys/un.h":                    [ "string.h", "sys/cdefs.h" ],
+    "sys/un.h":                    [ "string.h" ],
     "sys/wait.h":                  [ "signal.h" ],
 
     # POSIX networking headers
@@ -565,7 +563,6 @@ HEADER_ALLOWED_INCLUDES = {
 
     # Nonstandardized top-level headers
     "aliases.h":                   [ "sys/types.h" ],
-    "ar.h":                        [ "sys/cdefs.h" ],
     "argp.h":                      [ "ctype.h", "errno.h", "getopt.h",
                                      "limits.h", "stdio.h" ],
     "argz.h":                      [ "errno.h", "string.h" ],
@@ -594,7 +591,7 @@ HEADER_ALLOWED_INCLUDES = {
 
     # Nonstandardized sys/ headers
     "sys/acct.h":                  [ "endian.h", "stdint.h", "sys/types.h" ],
-    "sys/auxv.h":                  [ "elf.h", "sys/cdefs.h" ],
+    "sys/auxv.h":                  [ "elf.h" ],
     "sys/elf.h":                   [ "sys/procfs.h" ],
     "sys/epoll.h":                 [ "stdint.h", "sys/types.h" ],
     "sys/eventfd.h":               [ "stdint.h" ],
@@ -649,16 +646,16 @@ HEADER_ALLOWED_INCLUDES = {
     # Nonstandardized networking headers
     "ifaddrs.h":                   [ "sys/socket.h" ],
     "resolv.h":                    [ "arpa/nameser.h", "netinet/in.h",
-                                     "stdio.h", "sys/cdefs.h", "sys/param.h",\
+                                     "stdio.h", "sys/param.h",
                                      "sys/types.h" ],
 
     "arpa/nameser.h":              [ "arpa/nameser_compat.h", "stdint.h",
                                      "sys/param.h", "sys/types.h" ],
     "arpa/nameser_compat.h":       [ "endian.h" ],
-    "net/ethernet.h":              [ "stdint.h", "sys/types.h", "sys/cdefs.h",
+    "net/ethernet.h":              [ "stdint.h", "sys/types.h",
                                      "net/if_ether.h" ],
     "net/if_arp.h":                [ "stdint.h", "sys/socket.h",
-                                     "sys/types.h", "sys/cdefs.h" ],
+                                     "sys/types.h" ],
     "net/if_ppp.h":                [ "net/if.h", "net/ppp_defs.h", "stdint.h",
                                      "sys/ioctl.h", "sys/types.h" ],
     "net/if_shaper.h":             [ "net/if.h", "stdint.h", "sys/ioctl.h",
@@ -673,8 +670,7 @@ HEADER_ALLOWED_INCLUDES = {
                                      "sys/types.h", "stdint.h" ],
     "netinet/if_fddi.h":           [ "stdint.h", "sys/types.h" ],
     "netinet/if_tr.h":             [ "stdint.h", "sys/types.h" ],
-    "netinet/igmp.h":              [ "netinet/in.h", "sys/cdefs.h",
-                                     "sys/types.h" ],
+    "netinet/igmp.h":              [ "netinet/in.h", "sys/types.h" ],
     "netinet/in_systm.h":          [ "stdint.h", "sys/types.h" ],
     "netinet/ip.h":                [ "netinet/in.h", "sys/types.h" ],
     "netinet/ip6.h":               [ "inttypes.h", "netinet/in.h" ],
index 95400f78a571453398f656d1155e53447da7d30b..8bc9c3adb88aaf22cc1871e90bae185f4944c351 100644 (file)
@@ -18,7 +18,7 @@
 #ifndef        _SYS_UN_H
 #define        _SYS_UN_H       1
 
-#include <sys/cdefs.h>
+#include <features.h>
 
 /* Get the definition of the macro to define the common sockaddr members.  */
 #include <bits/sockaddr.h>
index 79b49ad66aeeabe218b74f7ed7d1e40fa867a78b..f7437bb7f7a17faff1f3f5986f9e075239ac6c2d 100644 (file)
@@ -18,7 +18,8 @@
 #ifndef _RPC_AUTH_DES_H
 #define _RPC_AUTH_DES_H        1
 
-#include <sys/cdefs.h>
+#include <features.h>
+
 #include <rpc/auth.h>
 
 __BEGIN_DECLS
index a2cc516cd6dbbde3170707a306dcda78a7e32328..efd9ee4a2f78cb1d3012bccfbefdbe4b3825ee1a 100644 (file)
@@ -35,7 +35,7 @@
 #ifndef _RPC_MSG_H
 #define _RPC_MSG_H 1
 
-#include <sys/cdefs.h>
+#include <features.h>
 
 #include <rpc/xdr.h>
 #include <rpc/clnt.h>
index 0b09ca330c900b9946232852441273d735103331..a2d37a1cd862b025b3d047fc5ea8c9539af9b03b 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef _MEMCOPY_H
 #define _MEMCOPY_H     1
 
+#include <features.h>
+
 /* The strategy of the memory functions is:
 
      1. Copy bytes until the destination pointer is aligned.
@@ -38,7 +40,6 @@
    exhaustive in the sense that I tried all alignment and length
    combinations, with and without overlap.  */
 
-#include <sys/cdefs.h>
 #include <endian.h>
 #include <pagecopy.h>
 
index 49f1bfbc26d0713fe9a726cf617b45ed1d9c94c4..3b59e949d8fdb4bac37fd81489ad78d5c1ae90c3 100644 (file)
  */
 
 #ifndef _NETINET_TCP_H
-
 #define _NETINET_TCP_H 1
-#include <sys/cdefs.h>
 
+#include <features.h>
 
 __BEGIN_DECLS
 
index 3216860493d7f1f0c85ae0ec5ee6ce3194aaebf7..2f9d37707ecfbf26f8ffd5e106d475956cf494b6 100644 (file)
@@ -25,7 +25,6 @@
 
 #include <features.h>
 
-#include <sys/cdefs.h>
 #ifndef __extern_inline
 /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
    inline semantics, unless -fgnu89-inline is used.  */
index 06beb6c9afae4455ac3fb0de832f6de6a77a8a54..53b2e39600b041b51d8820477293f128aae79df7 100644 (file)
@@ -21,7 +21,8 @@
 #ifndef __NET_ETHERNET_H
 #define __NET_ETHERNET_H 1
 
-#include <sys/cdefs.h>
+#include <features.h>
+
 #include <sys/types.h>
 #include <stdint.h>
 #include <net/if_ether.h>     /* IEEE 802.3 Ethernet constants */
index 0fa9bcec9ef7781598911f21e9bcdc723b64ce15..ffb6ef1e22c04f611c0b257a80270b727cc95bdb 100644 (file)
@@ -20,9 +20,9 @@
 /* Based on the 4.4BSD and Linux version of this file.  */
 
 #ifndef _NET_IF_ARP_H
-
 #define _NET_IF_ARP_H 1
-#include <sys/cdefs.h>
+
+#include <features.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>