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