removed assumption that time_t is an unsigned type
This commit is contained in:
parent
f0581f7706
commit
0d8a8bae5f
2 changed files with 12 additions and 8 deletions
|
@ -8,8 +8,10 @@
|
||||||
double
|
double
|
||||||
difftime(time_t time1, time_t time0)
|
difftime(time_t time1, time_t time0)
|
||||||
{
|
{
|
||||||
/* be careful: time_t is unsigned */
|
/* be careful: time_t may be unsigned */
|
||||||
if (time0 > time1)
|
if ((time_t)-1 > 0 && time0 > time1) {
|
||||||
return - (double) (time0 - time1);
|
return - (double) (time0 - time1);
|
||||||
else return (double) (time1 - time0);
|
} else {
|
||||||
|
return (double)(time1 - time0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,9 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include "loc_incl.h"
|
#include "loc_incl.h"
|
||||||
|
|
||||||
/* The code assumes that time_t is an unsigned long. When it is not, some
|
/* The code assumes that unsigned long can be converted to time_t.
|
||||||
* things may have to change.
|
* 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
|
time_t
|
||||||
mktime(register struct tm *timep)
|
mktime(register struct tm *timep)
|
||||||
|
@ -16,7 +17,7 @@ mktime(register struct tm *timep)
|
||||||
register long day, year;
|
register long day, year;
|
||||||
register int tm_year;
|
register int tm_year;
|
||||||
int yday, month;
|
int yday, month;
|
||||||
register time_t seconds;
|
register unsigned long seconds;
|
||||||
int overflow;
|
int overflow;
|
||||||
unsigned dst;
|
unsigned dst;
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ mktime(register struct tm *timep)
|
||||||
timep->tm_mday = day + 1;
|
timep->tm_mday = day + 1;
|
||||||
_tzset(); /* set timezone and dst info */
|
_tzset(); /* set timezone and dst info */
|
||||||
year = EPOCH_YR;
|
year = EPOCH_YR;
|
||||||
if (timep->tm_year < year - YEAR0) return -1;
|
if (timep->tm_year < year - YEAR0) return (time_t)-1;
|
||||||
seconds = 0;
|
seconds = 0;
|
||||||
day = 0; /* means days since day 0 now */
|
day = 0; /* means days since day 0 now */
|
||||||
overflow = 0;
|
overflow = 0;
|
||||||
|
@ -124,5 +125,6 @@ mktime(register struct tm *timep)
|
||||||
|
|
||||||
if (overflow) return (time_t)-1;
|
if (overflow) return (time_t)-1;
|
||||||
|
|
||||||
return seconds;
|
if ((time_t)seconds != seconds) return (time_t)-1;
|
||||||
|
return (time_t)seconds;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue