changeset 13785:ff58e398c6aa

time: enforce recent POSIX ruling that time_t is integral * lib/time.in.h (__time_t_must_be_integral): Detect any problematic systems, allowing the rest of gnulib to assume POSIX. Signed-off-by: Eric Blake <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Fri, 08 Oct 2010 17:15:47 -0600
parents 69ee8a8d4ebd
children 750118044e06
files ChangeLog lib/time.in.h
diffstat 2 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-10-08  Eric Blake  <eblake@redhat.com>
+
+	time: enforce recent POSIX ruling that time_t is integral
+	* lib/time.in.h (__time_t_must_be_integral): Detect any
+	problematic systems, allowing the rest of gnulib to assume POSIX.
+
 2010-10-08  Jim Meyering  <meyering@redhat.com>
 
 	fdopendir: fix a bug on systems lacking openat and /proc support
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -84,6 +84,15 @@
 #  endif
 # endif
 
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
+   time_t to be an integer type, even though C99 permits floating
+   point.  We don't know of any implementation that uses floating
+   point, and it is much easier to write code that doesn't have to
+   worry about that corner case, so we force the issue.  */
+struct __time_t_must_be_integral {
+  unsigned int __floating_time_t_unsupported : 2 * ((time_t) 1 / 2 == 0) - 1;
+};
+
 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
    return -1 and store the remaining time into RMTP.  See
    <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */