221 |
time_t |
time_t |
222 |
__mktime_internal (struct tm *tp, |
__mktime_internal (struct tm *tp, |
223 |
struct tm *(*convert) (const time_t *, struct tm *), |
struct tm *(*convert) (const time_t *, struct tm *), |
224 |
time_t *offset) |
long int *offset) |
225 |
{ |
{ |
226 |
time_t t, dt, t0, t1, t2; |
time_t t, dt, t0, t1, t2; |
227 |
struct tm tm; |
struct tm tm; |
279 |
tm.tm_year = EPOCH_YEAR - TM_YEAR_BASE; |
tm.tm_year = EPOCH_YEAR - TM_YEAR_BASE; |
280 |
tm.tm_yday = tm.tm_hour = tm.tm_min = tm.tm_sec = 0; |
tm.tm_yday = tm.tm_hour = tm.tm_min = tm.tm_sec = 0; |
281 |
t0 = ydhms_tm_diff (year, yday, hour, min, sec, &tm); |
t0 = ydhms_tm_diff (year, yday, hour, min, sec, &tm); |
282 |
|
t = t0 + *offset; |
283 |
|
if ((t < t0) != (*offset < 0)) |
284 |
|
t = t0; |
285 |
|
|
286 |
for (t = t1 = t2 = t0 + *offset, dst2 = 0; |
for (t1 = t2 = t, dst2 = 0; |
287 |
(dt = ydhms_tm_diff (year, yday, hour, min, sec, |
(dt = ydhms_tm_diff (year, yday, hour, min, sec, |
288 |
ranged_convert (convert, &t, &tm))); |
ranged_convert (convert, &t, &tm))); |
289 |
t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0) |
t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0) |
379 |
} |
} |
380 |
|
|
381 |
|
|
382 |
static time_t localtime_offset; |
static long int localtime_offset; |
383 |
|
|
384 |
/* Convert *TP to a time_t value. */ |
/* Convert *TP to a time_t value. */ |
385 |
time_t |
time_t |