ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/timegm.c
Revision: 2.2
Committed: Wed Jun 2 15:58:30 2010 UTC (13 years, 11 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad4R2P2, rad5R0, rad4R2, rad4R1, rad4R2P1
Changes since 2.1: +6 -4 lines
Log Message:
Fixes to MINGW build

File Contents

# 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 greg 2.1 #ifdef _WIN32
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     }