aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2016-08-24 11:54:34 -0400
committerZack Weinberg <zackw@panix.com>2016-09-23 08:43:56 -0400
commit05b68e14b146586c46121730241142256f0ef850 (patch)
tree678251dbc6c91e596cd49ed80ccaa61f8c072764
parentf2bea4da2e65b5d91a23a01fb2062bcec33974aa (diff)
downloadglibc-05b68e14b146586c46121730241142256f0ef850.tar.xz
glibc-05b68e14b146586c46121730241142256f0ef850.zip
Installed-header hygiene (BZ#20366): time.h types.
Many headers are expected to expose a subset of the type definitions in time.h. time.h has a whole bunch of messy logic for conditionally defining some its types and structs, but, as best I can tell, this has never worked 100%. In particular, __need_timespec is ineffective if _TIME_H has already been defined, which means that if you compile #include <time.h> #include <sched.h> with e.g. -fsyntax-only -std=c89 -Wall -Wsystem-headers, you will get In file included from test.c:2:0: /usr/include/sched.h:74:57: warning: "struct timespec" declared inside parameter list will not be visible outside of this definition or declaration extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; ^~~~~~~~ And if you want to _use_ sched_rr_get_interval in a TU compiled that way, you're hosed. This patch replaces all of that with small bits/types/TYPE.h headers as introduced earlier. time.h and bits/time.h are now *much* simpler, and a lot of other headers are slightly simpler. * time/time.h, bits/time.h, sysdeps/unix/sysv/linux/bits/time.h: Remove all logic conditional on __need macros. Move all the conditionally defined types to their own headers... * time/bits/types/clock_t.h: Define clock_t here. * time/bits/types/clockid_t.h: Define clockid_t here. * time/bits/types/struct_itimerspec.h: Define struct itimerspec here. * time/bits/types/struct_timespec.h: Define struct timespec here. * time/bits/types/struct_timeval.h: Define struct timeval here. * time/bits/types/struct_tm.h: Define struct tm here. * time/bits/types/time_t.h: Define time_t here. * time/bits/types/timer_t.h: Define timer_t here. * time/Makefile: Install the new headers. * bits/resource.h, io/fcntl.h, io/sys/poll.h, io/sys/stat.h * io/utime.h, misc/sys/select.h, posix/sched.h, posix/sys/times.h * posix/sys/types.h, resolv/netdb.h, rt/aio.h, rt/mqueue.h * signal/signal.h, pthread/semaphore.h, sysdeps/nptl/pthread.h * sysdeps/unix/sysv/linux/alpha/bits/resource.h * sysdeps/unix/sysv/linux/alpha/sys/acct.h * sysdeps/unix/sysv/linux/bits/resource.h * sysdeps/unix/sysv/linux/bits/timex.h * sysdeps/unix/sysv/linux/mips/bits/resource.h * sysdeps/unix/sysv/linux/net/ppp_defs.h * sysdeps/unix/sysv/linux/sparc/bits/resource.h * sysdeps/unix/sysv/linux/sys/acct.h * sysdeps/unix/sysv/linux/sys/timerfd.h * sysvipc/sys/msg.h, sysvipc/sys/sem.h, sysvipc/sys/shm.h * time/sys/time.h, time/sys/timeb.h Use the new bits/types headers. * include/time.h: Remove __need logic. * include/bits/time.h * include/bits/types/clock_t.h, include/bits/types/clockid_t.h * include/bits/types/time_t.h, include/bits/types/timer_t.h * include/bits/types/struct_itimerspec.h * include/bits/types/struct_timespec.h * include/bits/types/struct_timeval.h * include/bits/types/struct_tm.h: New wrapper headers.
-rw-r--r--ChangeLog42
-rw-r--r--bits/resource.h3
-rw-r--r--bits/time.h54
-rw-r--r--include/bits/types/clock_t.h1
-rw-r--r--include/bits/types/clockid_t.h1
-rw-r--r--include/bits/types/struct_itimerspec.h1
-rw-r--r--include/bits/types/struct_timespec.h1
-rw-r--r--include/bits/types/struct_timeval.h1
-rw-r--r--include/bits/types/struct_tm.h1
-rw-r--r--include/bits/types/time_t.h1
-rw-r--r--include/bits/types/timer_t.h1
-rw-r--r--include/time.h7
-rw-r--r--io/fcntl.h3
-rw-r--r--io/sys/poll.h3
-rw-r--r--io/sys/stat.h13
-rw-r--r--io/utime.h3
-rw-r--r--misc/sys/select.h8
-rw-r--r--posix/sched.h9
-rw-r--r--posix/sys/times.h4
-rw-r--r--posix/sys/types.h9
-rw-r--r--resolv/netdb.h3
-rw-r--r--rt/aio.h3
-rw-r--r--rt/mqueue.h3
-rw-r--r--signal/signal.h3
-rw-r--r--sysdeps/nptl/pthread.h1
-rw-r--r--sysdeps/pthread/semaphore.h3
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/resource.h3
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sys/acct.h4
-rw-r--r--sysdeps/unix/sysv/linux/bits/resource.h3
-rw-r--r--sysdeps/unix/sysv/linux/bits/time.h68
-rw-r--r--sysdeps/unix/sysv/linux/bits/timex.h1
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/resource.h3
-rw-r--r--sysdeps/unix/sysv/linux/net/ppp_defs.h4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/resource.h3
-rw-r--r--sysdeps/unix/sysv/linux/sys/acct.h3
-rw-r--r--sysdeps/unix/sysv/linux/sys/timerfd.h1
-rw-r--r--sysvipc/sys/msg.h3
-rw-r--r--sysvipc/sys/sem.h3
-rw-r--r--sysvipc/sys/shm.h3
-rw-r--r--time/Makefile7
-rw-r--r--time/bits/types/clock_t.h15
-rw-r--r--time/bits/types/clockid_t.h9
-rw-r--r--time/bits/types/struct_itimerspec.h14
-rw-r--r--time/bits/types/struct_timespec.h14
-rw-r--r--time/bits/types/struct_timeval.h13
-rw-r--r--time/bits/types/struct_tm.h33
-rw-r--r--time/bits/types/time_t.h14
-rw-r--r--time/bits/types/timer_t.h9
-rw-r--r--time/sys/time.h9
-rw-r--r--time/sys/timeb.h4
-rw-r--r--time/time.h237
51 files changed, 327 insertions, 335 deletions
diff --git a/ChangeLog b/ChangeLog
index 60500b47c8..b428ba42ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,47 @@
2016-09-23 Zack Weinberg <zackw@panix.com>
+ * time/time.h, bits/time.h, sysdeps/unix/sysv/linux/bits/time.h:
+ Remove all logic conditional on __need macros. Move all the
+ conditionally defined types to their own headers...
+ * time/bits/types/clock_t.h: Define clock_t here.
+ * time/bits/types/clockid_t.h: Define clockid_t here.
+ * time/bits/types/struct_itimerspec.h: Define struct itimerspec here.
+ * time/bits/types/struct_timespec.h: Define struct timespec here.
+ * time/bits/types/struct_timeval.h: Define struct timeval here.
+ * time/bits/types/struct_tm.h: Define struct tm here.
+ * time/bits/types/time_t.h: Define time_t here.
+ * time/bits/types/timer_t.h: Define timer_t here.
+ * time/Makefile: Install the new headers.
+
+ * bits/resource.h, io/fcntl.h, io/sys/poll.h, io/sys/stat.h
+ * io/utime.h, misc/sys/select.h, posix/sched.h, posix/sys/times.h
+ * posix/sys/types.h, resolv/netdb.h, rt/aio.h, rt/mqueue.h
+ * signal/signal.h, pthread/semaphore.h, sysdeps/nptl/pthread.h
+ * sysdeps/unix/sysv/linux/alpha/bits/resource.h
+ * sysdeps/unix/sysv/linux/alpha/sys/acct.h
+ * sysdeps/unix/sysv/linux/bits/resource.h
+ * sysdeps/unix/sysv/linux/bits/timex.h
+ * sysdeps/unix/sysv/linux/mips/bits/resource.h
+ * sysdeps/unix/sysv/linux/net/ppp_defs.h
+ * sysdeps/unix/sysv/linux/sparc/bits/resource.h
+ * sysdeps/unix/sysv/linux/sys/acct.h
+ * sysdeps/unix/sysv/linux/sys/timerfd.h
+ * sysvipc/sys/msg.h, sysvipc/sys/sem.h, sysvipc/sys/shm.h
+ * time/sys/time.h, time/sys/timeb.h
+ Use the new bits/types headers.
+
+ * include/time.h: Remove __need logic.
+ * include/bits/time.h
+ * include/bits/types/clock_t.h, include/bits/types/clockid_t.h
+ * include/bits/types/time_t.h, include/bits/types/timer_t.h
+ * include/bits/types/struct_itimerspec.h
+ * include/bits/types/struct_timespec.h
+ * include/bits/types/struct_timeval.h
+ * include/bits/types/struct_tm.h:
+ New wrapper headers.
+
+2016-09-23 Zack Weinberg <zackw@panix.com>
+
* sysdeps/mach/hurd/net/if_ppp.h
* sysdeps/unix/sysv/linux/net/if_ppp.h:
Only define struct ifpppstatsreq and struct ifpppcstatsreq
diff --git a/bits/resource.h b/bits/resource.h
index 7d2d66c7c9..5cd2fe56a2 100644
--- a/bits/resource.h
+++ b/bits/resource.h
@@ -129,8 +129,7 @@ enum __rusage_who
#define RUSAGE_CHILDREN RUSAGE_CHILDREN
};
-#define __need_timeval
-#include <bits/time.h> /* For `struct timeval'. */
+#include <bits/types/struct_timeval.h>
/* Structure which says how much of each resource has been used. */
struct rusage
diff --git a/bits/time.h b/bits/time.h
index 19c7ab0997..84e0e94a17 100644
--- a/bits/time.h
+++ b/bits/time.h
@@ -20,9 +20,10 @@
* Never include this file directly; use <time.h> instead.
*/
-#ifndef __need_timeval
-# ifndef _BITS_TIME_H
-# define _BITS_TIME_H 1
+#ifndef _BITS_TIME_H
+#define _BITS_TIME_H 1
+
+#include <bits/types.h>
/* ISO/IEC 9899:1999 7.23.1: Components of time
The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is
@@ -30,51 +31,34 @@
/* CAE XSH, Issue 4, Version 2: <time.h>
The value of CLOCKS_PER_SEC is required to be 1 million on all
XSI-conformant systems. */
-# define CLOCKS_PER_SEC ((clock_t) 1000000)
+#define CLOCKS_PER_SEC ((__clock_t) 1000000)
-# if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+#if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \
+ && !defined __USE_XOPEN2K
/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
presents the real value for clock ticks per second for the system. */
-# include <bits/types.h>
extern long int __sysconf (int);
-# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
-# endif
+# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
+#endif
-# ifdef __USE_POSIX199309
+#ifdef __USE_POSIX199309
/* Identifier for system-wide realtime clock. */
-# define CLOCK_REALTIME 0
+# define CLOCK_REALTIME 0
/* Monotonic system-wide clock. */
-# define CLOCK_MONOTONIC 1
+# define CLOCK_MONOTONIC 1
/* High-resolution timer from the CPU. */
-# define CLOCK_PROCESS_CPUTIME_ID 2
+# define CLOCK_PROCESS_CPUTIME_ID 2
/* Thread-specific CPU-time clock. */
-# define CLOCK_THREAD_CPUTIME_ID 3
+# define CLOCK_THREAD_CPUTIME_ID 3
/* Monotonic system-wide clock, not adjusted for frequency scaling. */
-# define CLOCK_MONOTONIC_RAW 4
+# define CLOCK_MONOTONIC_RAW 4
/* Identifier for system-wide realtime clock, updated only on ticks. */
-# define CLOCK_REALTIME_COARSE 5
+# define CLOCK_REALTIME_COARSE 5
/* Monotonic system-wide clock, updated only on ticks. */
-# define CLOCK_MONOTONIC_COARSE 6
+# define CLOCK_MONOTONIC_COARSE 6
/* Flag to indicate time is absolute. */
-# define TIMER_ABSTIME 1
-# endif
-
-# endif /* bits/time.h */
+# define TIMER_ABSTIME 1
#endif
-#ifdef __need_timeval
-# undef __need_timeval
-# ifndef _STRUCT_TIMEVAL
-# define _STRUCT_TIMEVAL 1
-# include <bits/types.h>
-
-/* A time value that is accurate to the nearest
- microsecond but also has a range of years. */
-struct timeval
- {
- __time_t tv_sec; /* Seconds. */
- __suseconds_t tv_usec; /* Microseconds. */
- };
-# endif /* struct timeval */
-#endif /* need timeval */
+#endif /* bits/time.h */
diff --git a/include/bits/types/clock_t.h b/include/bits/types/clock_t.h
new file mode 100644
index 0000000000..a08940dbef
--- /dev/null
+++ b/include/bits/types/clock_t.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/clock_t.h"
diff --git a/include/bits/types/clockid_t.h b/include/bits/types/clockid_t.h
new file mode 100644
index 0000000000..fb0a514446
--- /dev/null
+++ b/include/bits/types/clockid_t.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/clockid_t.h"
diff --git a/include/bits/types/struct_itimerspec.h b/include/bits/types/struct_itimerspec.h
new file mode 100644
index 0000000000..7d325d6f3c
--- /dev/null
+++ b/include/bits/types/struct_itimerspec.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/struct_itimerspec.h"
diff --git a/include/bits/types/struct_timespec.h b/include/bits/types/struct_timespec.h
new file mode 100644
index 0000000000..b8ec6a3862
--- /dev/null
+++ b/include/bits/types/struct_timespec.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/struct_timespec.h"
diff --git a/include/bits/types/struct_timeval.h b/include/bits/types/struct_timeval.h
new file mode 100644
index 0000000000..5d2cb78259
--- /dev/null
+++ b/include/bits/types/struct_timeval.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/struct_timeval.h"
diff --git a/include/bits/types/struct_tm.h b/include/bits/types/struct_tm.h
new file mode 100644
index 0000000000..b70ac52f68
--- /dev/null
+++ b/include/bits/types/struct_tm.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/struct_tm.h"
diff --git a/include/bits/types/time_t.h b/include/bits/types/time_t.h
new file mode 100644
index 0000000000..16e75e19be
--- /dev/null
+++ b/include/bits/types/time_t.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/time_t.h"
diff --git a/include/bits/types/timer_t.h b/include/bits/types/timer_t.h
new file mode 100644
index 0000000000..e6b279bfcc
--- /dev/null
+++ b/include/bits/types/timer_t.h
@@ -0,0 +1 @@
+#include "../../time/bits/types/timer_t.h"
diff --git a/include/time.h b/include/time.h
index 8dd10dcdd8..684ceb812f 100644
--- a/include/time.h
+++ b/include/time.h
@@ -1,8 +1,7 @@
#ifndef _TIME_H
-#if defined __need_time_t || defined __need_clock_t || defined __need_timespec || defined _ISOMAC
-# include <time/time.h>
-#else
-# include <time/time.h>
+#include <time/time.h>
+
+#ifndef _ISOMAC
# include <xlocale.h>
__BEGIN_DECLS
diff --git a/io/fcntl.h b/io/fcntl.h
index cb706b4f0f..12099a2181 100644
--- a/io/fcntl.h
+++ b/io/fcntl.h
@@ -72,8 +72,7 @@ typedef __pid_t pid_t;