1#include <stdlib.h>2#include <time.h>34#include "../libc.h"56#undef gmtime78struct tm *9gmtime(const time_t *tim)10{11 div_t d;12 int month, year;13 time_t tday, day, t = *tim;14 static struct tm tm;1516 day = t / SECDAY;17 tday = t % SECDAY;18 if (tday < 0) {19 tday += SECDAY;20 day--;21 }2223 d = div(tday, 60);24 tm.tm_sec = d.rem;25 d = div(d.quot, 60);26 tm.tm_min = d.rem;27 tm.tm_hour = d.quot;2829 /* 1/1/1970 was Thursday */30 tm.tm_wday = (day + THU) % 7;31 if (tm.tm_wday < 0)32 tm.tm_wday += 7;3334 year = EPOCH;35 if (day >= 0) {36 while (day >= _daysyear(year))37 day -= _daysyear(year++);38 } else {39 while (day < 0)40 day += _daysyear(--year);41 }4243 tm.tm_year = year - 1900;44 tm.tm_yday = day;4546 _daysmon[FEB] = FEBDAYS(year);47 for (month = JAN; day >= _daysmon[month]; month++)48 day -= _daysmon[month];49 tm.tm_mon = month;50 tm.tm_mday = day + 1;5152 tm.tm_isdst = 0;53 tm.tm_zone = "UTC";54 tm.tm_gmtoff = 0;5556 return &tm;57}