changeset 8987:9d7e51011293

Detect porting problems to FreeBSD/arm, which has time_t wider than long int. Original problem reported for GNU diff by Xin Li in <http://lists.gnu.org/archive/html/bug-gnu-utils/2007-06/msg00091.html>. * modules/getdate (Depends-on): Add intprops, verify. * lib/getdate.y: Include intprops.h, verify.h. Verify that time_t is an integer type no wider than long int.
author Paul Eggert <eggert@cs.ucla.edu>
date Mon, 18 Jun 2007 23:09:12 +0000
parents c931406ac6ef
children 4162ebc5fa6c
files ChangeLog lib/getdate.y modules/getdate
diffstat 3 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-06-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Detect porting problems to FreeBSD/arm, which has time_t wider than
+	long int.  Original problem reported for GNU diff by Xin Li in
+	<http://lists.gnu.org/archive/html/bug-gnu-utils/2007-06/msg00091.html>.
+	* modules/getdate (Depends-on): Add intprops, verify.
+	* lib/getdate.y: Include intprops.h, verify.h.  Verify that time_t
+	is an integer type no wider than long int.
+
 2007-06-18  Jim Meyering  <jim@meyering.net>
 
 	New module: mreadlink-with-size.
--- a/lib/getdate.y
+++ b/lib/getdate.y
@@ -35,7 +35,10 @@
 #include <config.h>
 
 #include "getdate.h"
+
+#include "intprops.h"
 #include "timespec.h"
+#include "verify.h"
 
 /* There's no need to extend the stack, so there's no need to involve
    alloca.  */
@@ -107,6 +110,13 @@
 
 #define HOUR(x) ((x) * 60)
 
+/* Lots of this code assumes time_t and time_t-like values fit into
+   long int.  It also assumes that signed integer overflow silently
+   wraps around, but there's no portable way to check for that at
+   compile-time.  */
+verify (TYPE_IS_INTEGER (time_t));
+verify (LONG_MIN <= TYPE_MINIMUM (time_t) && TYPE_MAXIMUM (time_t) <= LONG_MAX);
+
 /* An integer value, and the number of digits in its textual
    representation.  */
 typedef struct
--- a/modules/getdate
+++ b/modules/getdate
@@ -12,9 +12,11 @@
 Depends-on:
 stdbool
 gettime
+intprops
 mktime
 setenv
 time
+verify
 xalloc
 
 configure.ac: