Line data Source code
1 : #include "time.h" 2 : 3 : /* 4 : mktime replacement from Samba 5 : */ 6 1583 : time_t ap_mktime(const struct tm *t) 7 : { 8 1583 : time_t epoch = 0; 9 : int n; 10 1583 : int mon [] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, y, m, i; 11 1583 : const unsigned MINUTE = 60; 12 1583 : const unsigned HOUR = 60*MINUTE; 13 1583 : const unsigned DAY = 24*HOUR; 14 1583 : const unsigned YEAR = 365*DAY; 15 : 16 1583 : if (t->tm_year < 70) { 17 4 : return (time_t)-1; 18 : } 19 : 20 1579 : n = t->tm_year + 1900 - 1; 21 1579 : epoch = (t->tm_year - 70) * YEAR + 22 1579 : ((n / 4 - n / 100 + n / 400) - (1969 / 4 - 1969 / 100 + 1969 / 400)) * DAY; 23 : 24 1579 : y = t->tm_year + 1900; 25 1579 : m = 0; 26 : 27 16967 : for (i = 0; i < t->tm_mon; i++) { 28 15388 : epoch += mon [m] * DAY; 29 15388 : if (m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) { 30 4 : epoch += DAY; 31 : } 32 : 33 15388 : if (++m > 11) { 34 2 : m = 0; 35 2 : y++; 36 : } 37 : } 38 : 39 1579 : epoch += (t->tm_mday - 1) * DAY; 40 1579 : epoch += t->tm_hour * HOUR + t->tm_min * MINUTE + t->tm_sec; 41 : 42 1579 : return epoch; 43 : } 44 :