1 /**
2  * D header file for C99.
3  *
4  * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h)
5  *
6  * Copyright: Copyright Sean Kelly 2005 - 2009.
7  * License: Distributed under the
8  *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
9  *    (See accompanying file LICENSE)
10  * Authors:   Sean Kelly,
11  *            Alex Rønne Petersen
12  * Source:    $(DRUNTIMESRC core/stdc/_time.d)
13  * Standards: ISO/IEC 9899:1999 (E)
14  */
15 
16 module core.sys.posix.stdc.time;
17 
18 version (Posix):
19 
20 import core.stdc.config;
21 
22 version (OSX)
23     version = Darwin;
24 else version (iOS)
25     version = Darwin;
26 else version (TVOS)
27     version = Darwin;
28 else version (WatchOS)
29     version = Darwin;
30 
31 extern (C):
32 @trusted: // There are only a few functions here that use unsafe C strings.
33 nothrow:
34 @nogc:
35 
36 ///
37 struct tm
38 {
39     int     tm_sec;     /// seconds after the minute [0-60]
40     int     tm_min;     /// minutes after the hour [0-59]
41     int     tm_hour;    /// hours since midnight [0-23]
42     int     tm_mday;    /// day of the month [1-31]
43     int     tm_mon;     /// months since January [0-11]
44     int     tm_year;    /// years since 1900
45     int     tm_wday;    /// days since Sunday [0-6]
46     int     tm_yday;    /// days since January 1 [0-365]
47     int     tm_isdst;   /// Daylight Savings Time flag
48     c_long  tm_gmtoff;  /// offset from CUT in seconds
49     char*   tm_zone;    /// timezone abbreviation
50 }
51 
52 public import core.sys.posix.sys.types : time_t, clock_t;
53 
54 ///
55 version (CRuntime_Glibc)
56 {
57     enum clock_t CLOCKS_PER_SEC = 1_000_000;
58     clock_t clock();
59 }
60 else version (CRuntime_Musl)
61 {
62     enum clock_t CLOCKS_PER_SEC = 1_000_000;
63     clock_t clock();
64 }
65 else version (CRuntime_Bionic)
66 {
67     enum clock_t CLOCKS_PER_SEC = 1_000_000;
68     clock_t clock();
69 }
70 else version (CRuntime_UClibc)
71 {
72     enum clock_t CLOCKS_PER_SEC = 1_000_000;
73     clock_t clock();
74 }
75 else version (OSX)
76 {
77     enum clock_t CLOCKS_PER_SEC = 1_000_000; // was 100 until OSX 10.4/10.5
78     version (X86)
79         extern (C) pragma(mangle, "clock$UNIX2003") clock_t clock();
80     else
81         clock_t clock();
82 }
83 else version (Darwin) // other Darwins (iOS, TVOS, WatchOS)
84 {
85     enum clock_t CLOCKS_PER_SEC = 1_000_000;
86     clock_t clock();
87 }
88 else version (FreeBSD)
89 {
90     enum clock_t CLOCKS_PER_SEC = 128;
91     clock_t clock();
92 }
93 else version (NetBSD)
94 {
95     enum clock_t CLOCKS_PER_SEC = 100;
96     clock_t clock();
97 }
98 else version (OpenBSD)
99 {
100     enum clock_t CLOCKS_PER_SEC = 100;
101     clock_t clock();
102 }
103 else version (DragonFlyBSD)
104 {
105     enum clock_t CLOCKS_PER_SEC = 128;
106     clock_t clock();
107 }
108 else version (Solaris)
109 {
110     enum clock_t CLOCKS_PER_SEC = 1_000_000;
111     clock_t clock();
112 }
113 else
114 {
115     static assert(0, "unsupported system");
116 }
117 
118 version (Darwin)
119 {
120     ///
121     void tzset();                            // non-standard
122     ///
123     extern __gshared const(char)*[2] tzname; // non-standard
124 }
125 else version (CRuntime_Glibc)
126 {
127     ///
128     void tzset();                            // non-standard
129     ///
130     extern __gshared const(char)*[2] tzname; // non-standard
131 }
132 else version (FreeBSD)
133 {
134     ///
135     void tzset();                            // non-standard
136     ///
137     extern __gshared const(char)*[2] tzname; // non-standard
138 }
139 else version (NetBSD)
140 {
141     ///
142     void tzset();                            // non-standard
143     ///
144     extern __gshared const(char)*[2] tzname; // non-standard
145 }
146 else version (OpenBSD)
147 {
148     ///
149     void tzset();                            // non-standard
150     ///
151     extern __gshared const(char)*[2] tzname; // non-standard
152 }
153 else version (DragonFlyBSD)
154 {
155     ///
156     void tzset();                            // non-standard
157     ///
158     extern __gshared const(char)*[2] tzname; // non-standard
159 }
160 else version (Solaris)
161 {
162     ///
163     void tzset();
164     ///
165     extern __gshared const(char)*[2] tzname;
166 }
167 else version (CRuntime_Bionic)
168 {
169     ///
170     void tzset();
171     ///
172     extern __gshared const(char)*[2] tzname;
173 }
174 else version (CRuntime_Musl)
175 {
176     ///
177     void tzset();                            // non-standard
178     ///
179     extern __gshared const(char)*[2] tzname; // non-standard
180 }
181 else version (CRuntime_UClibc)
182 {
183     ///
184     void tzset();
185     ///
186     extern __gshared const(char)*[2] tzname;
187 }
188 else
189 {
190     static assert(false, "Unsupported platform");
191 }