From 0d8a8bae5f49f84228b2aed066c15df6be16ac1b Mon Sep 17 00:00:00 2001 From: eck Date: Tue, 11 Sep 1990 10:18:51 +0000 Subject: [PATCH] removed assumption that time_t is an unsigned type --- lang/cem/libcc.ansi/time/difftime.c | 8 +++++--- lang/cem/libcc.ansi/time/mktime.c | 12 +++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lang/cem/libcc.ansi/time/difftime.c b/lang/cem/libcc.ansi/time/difftime.c index bf22f74b5..ed6e64cfe 100644 --- a/lang/cem/libcc.ansi/time/difftime.c +++ b/lang/cem/libcc.ansi/time/difftime.c @@ -8,8 +8,10 @@ double difftime(time_t time1, time_t time0) { - /* be careful: time_t is unsigned */ - if (time0 > time1) + /* be careful: time_t may be unsigned */ + if ((time_t)-1 > 0 && time0 > time1) { return - (double) (time0 - time1); - else return (double) (time1 - time0); + } else { + return (double)(time1 - time0); + } } diff --git a/lang/cem/libcc.ansi/time/mktime.c b/lang/cem/libcc.ansi/time/mktime.c index 9ea4ec695..0aa05eeeb 100644 --- a/lang/cem/libcc.ansi/time/mktime.c +++ b/lang/cem/libcc.ansi/time/mktime.c @@ -7,8 +7,9 @@ #include #include "loc_incl.h" -/* The code assumes that time_t is an unsigned long. When it is not, some - * things may have to change. +/* The code assumes that unsigned long can be converted to time_t. + * A time_t should not be wider than unsigned long, since this would mean + * that the check for overflow at the end could fail. */ time_t mktime(register struct tm *timep) @@ -16,7 +17,7 @@ mktime(register struct tm *timep) register long day, year; register int tm_year; int yday, month; - register time_t seconds; + register unsigned long seconds; int overflow; unsigned dst; @@ -63,7 +64,7 @@ mktime(register struct tm *timep) timep->tm_mday = day + 1; _tzset(); /* set timezone and dst info */ year = EPOCH_YR; - if (timep->tm_year < year - YEAR0) return -1; + if (timep->tm_year < year - YEAR0) return (time_t)-1; seconds = 0; day = 0; /* means days since day 0 now */ overflow = 0; @@ -124,5 +125,6 @@ mktime(register struct tm *timep) if (overflow) return (time_t)-1; - return seconds; + if ((time_t)seconds != seconds) return (time_t)-1; + return (time_t)seconds; } -- 2.34.1