fix error code on time conversion overflows
authorRich Felker <dalias@aerifal.cx>
Wed, 17 Jul 2013 14:39:11 +0000 (10:39 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 17 Jul 2013 14:39:11 +0000 (10:39 -0400)
POSIX mandates EOVERFLOW for this condition.

src/time/gmtime_r.c
src/time/localtime_r.c
src/time/mktime.c
src/time/timegm.c

index 0272870..fee01bd 100644 (file)
@@ -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;
index b36c1d8..c52678f 100644 (file)
@@ -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;
index e38b461..ef1fb42 100644 (file)
@@ -25,6 +25,6 @@ time_t mktime(struct tm *tm)
        return t;
 
 error:
-       errno = EINVAL;
+       errno = EOVERFLOW;
        return -1;
 }
index 7148fca..e7a7939 100644 (file)
@@ -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;