github.com/afumu/libc@v0.0.6/musl/src/time/mktime.c (about) 1 #include "time_impl.h" 2 #include <errno.h> 3 4 time_t mktime(struct tm *tm) 5 { 6 struct tm new; 7 long opp; 8 long long t = __tm_to_secs(tm); 9 10 __secs_to_zone(t, 1, &new.tm_isdst, &new.__tm_gmtoff, &opp, &new.__tm_zone); 11 12 if (tm->tm_isdst>=0 && new.tm_isdst!=tm->tm_isdst) 13 t -= opp - new.__tm_gmtoff; 14 15 t -= new.__tm_gmtoff; 16 if ((time_t)t != t) goto error; 17 18 __secs_to_zone(t, 0, &new.tm_isdst, &new.__tm_gmtoff, &opp, &new.__tm_zone); 19 20 if (__secs_to_tm(t + new.__tm_gmtoff, &new) < 0) goto error; 21 22 *tm = new; 23 return t; 24 25 error: 26 errno = EOVERFLOW; 27 return -1; 28 }