time: enforce recent POSIX ruling that time_t is integral
authorEric Blake <eblake@redhat.com>
Fri, 8 Oct 2010 23:15:47 +0000 (17:15 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 8 Oct 2010 23:21:52 +0000 (17:21 -0600)
* 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>
ChangeLog
lib/time.in.h

index 472c671..4817bf4 100644 (file)
--- 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
index 28e3f5f..f6bdad6 100644 (file)
@@ -84,6 +84,15 @@ struct timespec
 #  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>.  */