Revision: | 2.3 |
Committed: | Sun Mar 6 01:13:17 2016 UTC (9 years, 1 month ago) by schorsch |
Content type: | text/plain |
Branch: | MAIN |
CVS Tags: | rad5R4, rad5R2, rad5R1, rad5R3, HEAD |
Changes since 2.2: | +1 -1 lines |
Log Message: | Prepare for SCons build on Win32 and Win64 |
# | User | Rev | Content |
---|---|---|---|
1 | greg | 2.1 | /* |
2 | * timegm.c | ||
3 | * | ||
4 | * Replacement for missing GNU library function. | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | |||
9 | #include <time.h> | ||
10 | #include <stdlib.h> | ||
11 | |||
12 | greg | 2.2 | extern time_t timegm(struct tm *tm); |
13 | |||
14 | schorsch | 2.3 | #if defined(_WIN32) || defined(_WIN64) |
15 | greg | 2.2 | static char * |
16 | greg | 2.1 | setGMT() |
17 | { | ||
18 | static time_t prevTZ; | ||
19 | prevTZ = _timezone; | ||
20 | _timezone = 0; | ||
21 | return (char *)&prevTZ; | ||
22 | } | ||
23 | greg | 2.2 | static void |
24 | greg | 2.1 | resetTZ(char *cp) |
25 | { | ||
26 | _timezone = *(time_t *)cp; | ||
27 | } | ||
28 | #else | ||
29 | greg | 2.2 | static char * |
30 | greg | 2.1 | setGMT() |
31 | { | ||
32 | char *tz = getenv("TZ"); | ||
33 | setenv("TZ", "", 1); | ||
34 | tzset(); | ||
35 | return tz; | ||
36 | } | ||
37 | greg | 2.2 | static void |
38 | greg | 2.1 | resetTZ(char *tz) |
39 | { | ||
40 | if (tz) | ||
41 | setenv("TZ", tz, 1); | ||
42 | else | ||
43 | unsetenv("TZ"); | ||
44 | tzset(); | ||
45 | } | ||
46 | #endif | ||
47 | |||
48 | /* Convert GMT to UTC seconds from the epoch */ | ||
49 | time_t | ||
50 | timegm(struct tm *tm) | ||
51 | { | ||
52 | time_t ret; | ||
53 | char *tz; | ||
54 | |||
55 | tz = setGMT(); | ||
56 | ret = mktime(tm); | ||
57 | resetTZ(tz); | ||
58 | return(ret); | ||
59 | } |