Browse Source

fix error code on time conversion overflows

POSIX mandates EOVERFLOW for this condition.
rs-1.0
Rich Felker 13 years ago
parent
commit
ea81c0624f
  1. 2
      src/time/gmtime_r.c
  2. 2
      src/time/localtime_r.c
  3. 2
      src/time/mktime.c
  4. 2
      src/time/timegm.c

2
src/time/gmtime_r.c

@ -5,7 +5,7 @@
struct tm *__gmtime_r(const time_t *restrict t, struct tm *restrict tm)
{
if (__secs_to_tm(*t, tm) < 0) {
errno = EINVAL;
errno = EOVERFLOW;
return 0;
}
tm->tm_isdst = 0;

2
src/time/localtime_r.c

@ -6,7 +6,7 @@ struct tm *__localtime_r(const time_t *restrict t, struct tm *restrict tm)
{
__secs_to_zone(*t, 0, &tm->tm_isdst, &tm->__tm_gmtoff, 0, &tm->__tm_zone);
if (__secs_to_tm((long long)*t - tm->__tm_gmtoff, tm) < 0) {
errno = EINVAL;
errno = EOVERFLOW;
return 0;
}
return tm;

2
src/time/mktime.c

@ -25,6 +25,6 @@ time_t mktime(struct tm *tm)
return t;
error:
errno = EINVAL;
errno = EOVERFLOW;
return -1;
}

2
src/time/timegm.c

@ -7,7 +7,7 @@ time_t timegm(struct tm *tm)
struct tm new;
long long t = __tm_to_secs(tm);
if (__secs_to_tm(t, &new) < 0) {
errno = EINVAL;
errno = EOVERFLOW;
return -1;
}
*tm = new;

Loading…
Cancel
Save