1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
9
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
14 */
15 module core.sys.posix.sys.time;
16
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for time_t, suseconds_t
19 public import core.sys.posix.sys.select; // for fd_set, FD_CLR() FD_ISSET() FD_SET() FD_ZERO() FD_SETSIZE, select()
20
21 version (OSX)
22 version = Darwin;
23 else version (iOS)
24 version = Darwin;
25 else version (TVOS)
26 version = Darwin;
27 else version (WatchOS)
28 version = Darwin;
29
30 version (linux) public import core.sys.linux.sys.time;
31
version(Posix)32 version (Posix):
33 extern (C) nothrow @nogc:
34 @system:
35
36 //
37 // XOpen (XSI)
38 //
39 /*
40 struct timeval
41 {
42 time_t tv_sec;
43 suseconds_t tv_usec;
44 }
45
46 struct itimerval
47 {
48 timeval it_interval;
49 timeval it_value;
50 }
51
52 ITIMER_REAL
53 ITIMER_VIRTUAL
54 ITIMER_PROF
55
56 int getitimer(int, itimerval*);
57 int gettimeofday(timeval*, void*);
58 int select(int, fd_set*, fd_set*, fd_set*, timeval*); (defined in core.sys.posix.sys.signal)
59 int setitimer(int, const scope itimerval*, itimerval*);
60 int utimes(const scope char*, ref const(timeval)[2]); // LEGACY
61 */
62
63 version (CRuntime_Glibc)
64 {
65 struct timeval
66 {
67 time_t tv_sec;
68 suseconds_t tv_usec;
69 }
70
71 struct itimerval
72 {
73 timeval it_interval;
74 timeval it_value;
75 }
76
77 enum ITIMER_REAL = 0;
78 enum ITIMER_VIRTUAL = 1;
79 enum ITIMER_PROF = 2;
80
81 int getitimer(int, itimerval*);
82 int gettimeofday(timeval*, void*);
83 int setitimer(int, const scope itimerval*, itimerval*);
84 int utimes(const scope char*, ref const(timeval)[2]); // LEGACY
85 }
version(CRuntime_Musl)86 else version (CRuntime_Musl)
87 {
88 struct timeval
89 {
90 time_t tv_sec;
91 suseconds_t tv_usec;
92 }
93 int gettimeofday(timeval*, void*);
94 int utimes(const scope char*, ref const(timeval)[2]);
95 }
version(Darwin)96 else version (Darwin)
97 {
98 struct timeval
99 {
100 time_t tv_sec;
101 suseconds_t tv_usec;
102 }
103
104 struct itimerval
105 {
106 timeval it_interval;
107 timeval it_value;
108 }
109
110 // non-standard
111 struct timezone_t
112 {
113 int tz_minuteswest;
114 int tz_dsttime;
115 }
116
117 int getitimer(int, itimerval*);
118 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void*
119 int setitimer(int, const scope itimerval*, itimerval*);
120 int utimes(const scope char*, ref const(timeval)[2]);
121 }
version(FreeBSD)122 else version (FreeBSD)
123 {
124 struct timeval
125 {
126 time_t tv_sec;
127 suseconds_t tv_usec;
128 }
129
130 struct itimerval
131 {
132 timeval it_interval;
133 timeval it_value;
134 }
135
136 // non-standard
137 struct timezone_t
138 {
139 int tz_minuteswest;
140 int tz_dsttime;
141 }
142
143 int getitimer(int, itimerval*);
144 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void*
145 int setitimer(int, const scope itimerval*, itimerval*);
146 int utimes(const scope char*, ref const(timeval)[2]);
147 }
version(NetBSD)148 else version (NetBSD)
149 {
150 struct timeval
151 {
152 time_t tv_sec;
153 suseconds_t tv_usec;
154 }
155
156 struct itimerval
157 {
158 timeval it_interval;
159 timeval it_value;
160 }
161
162 int getitimer(int, itimerval*);
163 int gettimeofday(timeval*, void*); // timezone_t* is normally void*
164 int setitimer(int, const scope itimerval*, itimerval*);
165 int utimes(const scope char*, ref const(timeval)[2]);
166 }
version(OpenBSD)167 else version (OpenBSD)
168 {
169 struct timeval
170 {
171 time_t tv_sec;
172 suseconds_t tv_usec;
173 }
174
175 struct itimerval
176 {
177 timeval it_interval;
178 timeval it_value;
179 }
180
181 // non-standard
182 struct timezone_t
183 {
184 int tz_minuteswest;
185 int tz_dsttime;
186 }
187
188 int getitimer(int, itimerval*);
189 int gettimeofday(timeval*, timezone_t*);
190 int setitimer(int, const scope itimerval*, itimerval*);
191 int utimes(const scope char*, ref const(timeval)[2]);
192 }
version(DragonFlyBSD)193 else version (DragonFlyBSD)
194 {
195 struct timeval
196 {
197 time_t tv_sec;
198 suseconds_t tv_usec;
199 }
200
201 struct itimerval
202 {
203 timeval it_interval;
204 timeval it_value;
205 }
206
207 // non-standard
208 struct timezone_t
209 {
210 int tz_minuteswest;
211 int tz_dsttime;
212 }
213
214 int getitimer(int, itimerval*);
215 int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void*
216 int setitimer(int, const scope itimerval*, itimerval*);
217 int utimes(const scope char*, ref const(timeval)[2]);
218 }
version(Solaris)219 else version (Solaris)
220 {
221 struct timeval
222 {
223 time_t tv_sec;
224 suseconds_t tv_usec;
225 }
226
227 struct itimerval
228 {
229 timeval it_interval;
230 timeval it_value;
231 }
232
233 int getitimer(int, itimerval*);
234 int gettimeofday(timeval*, void*);
235 int setitimer(int, const scope itimerval*, itimerval*);
236 int utimes(const scope char*, ref const(timeval)[2]);
237 }
version(CRuntime_Bionic)238 else version (CRuntime_Bionic)
239 {
240 struct timeval
241 {
242 time_t tv_sec;
243 suseconds_t tv_usec;
244 }
245
246 struct itimerval
247 {
248 timeval it_interval;
249 timeval it_value;
250 }
251
252 struct timezone_t
253 {
254 int tz_minuteswest;
255 int tz_dsttime;
256 }
257
258 enum ITIMER_REAL = 0;
259 enum ITIMER_VIRTUAL = 1;
260 enum ITIMER_PROF = 2;
261
262 int getitimer(int, itimerval*);
263 int gettimeofday(timeval*, timezone_t*);
264 int setitimer(int, const scope itimerval*, itimerval*);
265 int utimes(const scope char*, ref const(timeval)[2]);
266 }
version(CRuntime_UClibc)267 else version (CRuntime_UClibc)
268 {
269 struct timeval
270 {
271 time_t tv_sec;
272 suseconds_t tv_usec;
273 }
274
275 struct itimerval
276 {
277 timeval it_interval;
278 timeval it_value;
279 }
280
281 enum ITIMER_REAL = 0;
282 enum ITIMER_VIRTUAL = 1;
283 enum ITIMER_PROF = 2;
284
285 int getitimer(int, itimerval*);
286 int gettimeofday(timeval*, void*);
287 int setitimer(int, const scope itimerval*, itimerval*);
288 int utimes(const scope char*, ref const(timeval)[2]);
289 }
290 else
291 {
292 static assert(false, "Unsupported platform");
293 }
294