1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-09-01 02:34:55 +00:00

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.
This commit is contained in:
Jim Meyering
2014-06-17 08:29:46 -07:00
parent ecc31417be
commit 831da41cbc
3 changed files with 17 additions and 3 deletions
+10
View File
@@ -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.
+6 -3
View File
@@ -27,6 +27,8 @@
#include <stdlib.h>
#include <string.h>
#include "intprops.h"
#ifndef NUL
#define NUL '\0'
#endif
@@ -51,7 +53,8 @@ typedef enum {
#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 @@ scale_n_add (time_t base, time_t val, int scale)
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;
+1
View File
@@ -6,6 +6,7 @@ lib/parse-duration.h
lib/parse-duration.c
Depends-on:
intprops
configure.ac: