changeset 17707:e2fa11403fca

parse-duration: eliminate 68-year duration limit * lib/parse-duration.c: Include "intprops.h". (TIME_MAX): Rename to MAX_DURATION and define to TYPE_MAXIMUM(time_t). * modules/parse-duration (Depends-on): Add intprops. Reported by Jonas 'Sortie' Termansen.
author Jim Meyering <meyering@fb.com>
date Tue, 17 Jun 2014 08:29:46 -0700
parents c4d4dc68512b
children 994f65de77de
files ChangeLog lib/parse-duration.c modules/parse-duration
diffstat 3 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2014-06-11  Bruce Korb  <bkorb@gnu.org>
+	Jim Meyering  <meyering@fb.com>
+
+	parse-duration: eliminate 68-year duration limit
+	* lib/parse-duration.c: Include "intprops.h".
+	(TIME_MAX): Rename to MAX_DURATION and define to
+	TYPE_MAXIMUM(time_t).
+	* modules/parse-duration (Depends-on): Add intprops.
+	Reported by Jonas 'Sortie' Termansen.
+
 2014-06-14  Paul Eggert  <eggert@cs.ucla.edu>
 
 	pthread: don't assume AC_CANONICAL_HOST, port better to Solaris, etc.
--- a/lib/parse-duration.c
+++ b/lib/parse-duration.c
@@ -27,6 +27,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "intprops.h"
+
 #ifndef NUL
 #define NUL '\0'
 #endif
@@ -51,7 +53,8 @@
 #define SEC_PER_MONTH   (SEC_PER_DAY * 30)
 #define SEC_PER_YEAR    (SEC_PER_DAY * 365)
 
-#define TIME_MAX        0x7FFFFFFF
+#undef  MAX_DURATION
+#define MAX_DURATION    TYPE_MAXIMUM(time_t)
 
 /* Wrapper around strtoul that does not require a cast.  */
 static unsigned long
@@ -80,14 +83,14 @@
       return BAD_TIME;
     }
 
-  if (val > TIME_MAX / scale)
+  if (val > MAX_DURATION / scale)
     {
       errno = ERANGE;
       return BAD_TIME;
     }
 
   val *= scale;
-  if (base > TIME_MAX - val)
+  if (base > MAX_DURATION - val)
     {
       errno = ERANGE;
       return BAD_TIME;
--- a/modules/parse-duration
+++ b/modules/parse-duration
@@ -6,6 +6,7 @@
 lib/parse-duration.c
 
 Depends-on:
+intprops
 
 configure.ac: