xref: /third_party/musl/include/time.h (revision 570af302)
1#ifndef	_TIME_H
2#define _TIME_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#include <features.h>
9
10#if __cplusplus >= 201103L
11#define NULL nullptr
12#elif defined(__cplusplus)
13#define NULL 0L
14#else
15#define NULL ((void*)0)
16#endif
17
18
19#define __NEED_size_t
20#define __NEED_time_t
21#define __NEED_clock_t
22#define __NEED_struct_timespec
23
24#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
25 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
26 || defined(_BSD_SOURCE)
27#define __NEED_clockid_t
28#define __NEED_timer_t
29#define __NEED_pid_t
30#define __NEED_locale_t
31#endif
32
33#include <bits/alltypes.h>
34
35#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
36#define __tm_gmtoff tm_gmtoff
37#define __tm_zone tm_zone
38#endif
39
40struct tm {
41	int tm_sec;
42	int tm_min;
43	int tm_hour;
44	int tm_mday;
45	int tm_mon;
46	int tm_year;
47	int tm_wday;
48	int tm_yday;
49	int tm_isdst;
50	long __tm_gmtoff;
51	const char *__tm_zone;
52};
53
54clock_t clock (void);
55time_t time (time_t *);
56double difftime (time_t, time_t);
57time_t mktime (struct tm *);
58size_t strftime (char *__restrict, size_t, const char *__restrict, const struct tm *__restrict);
59struct tm *gmtime (const time_t *);
60struct tm *localtime (const time_t *);
61char *asctime (const struct tm *);
62char *ctime (const time_t *);
63int timespec_get(struct timespec *, int);
64
65#define CLOCKS_PER_SEC 1000000L
66
67#define TIME_UTC 1
68
69#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
70 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
71 || defined(_BSD_SOURCE)
72
73size_t strftime_l (char *  __restrict, size_t, const char *  __restrict, const struct tm *  __restrict, locale_t);
74
75struct tm *gmtime_r (const time_t *__restrict, struct tm *__restrict);
76struct tm *localtime_r (const time_t *__restrict, struct tm *__restrict);
77struct tm *localtime_noenv_r(const time_t *__restrict, struct tm *__restrict);
78char *asctime_r (const struct tm *__restrict, char *__restrict);
79char *ctime_r (const time_t *, char *);
80
81void tzset (void);
82
83struct itimerspec {
84	struct timespec it_interval;
85	struct timespec it_value;
86};
87
88#define CLOCK_REALTIME           0
89#define CLOCK_MONOTONIC          1
90#define CLOCK_PROCESS_CPUTIME_ID 2
91#define CLOCK_THREAD_CPUTIME_ID  3
92#define CLOCK_MONOTONIC_RAW      4
93#define CLOCK_REALTIME_COARSE    5
94#define CLOCK_MONOTONIC_COARSE   6
95#define CLOCK_BOOTTIME           7
96#define CLOCK_REALTIME_ALARM     8
97#define CLOCK_BOOTTIME_ALARM     9
98#define CLOCK_SGI_CYCLE         10
99#define CLOCK_TAI               11
100
101#define TIMER_ABSTIME 1
102
103int nanosleep (const struct timespec *, struct timespec *);
104int clock_getres (clockid_t, struct timespec *);
105int clock_gettime (clockid_t, struct timespec *);
106int clock_settime (clockid_t, const struct timespec *);
107int clock_nanosleep (clockid_t, int, const struct timespec *, struct timespec *);
108int clock_getcpuclockid (pid_t, clockid_t *);
109
110struct sigevent;
111int timer_create (clockid_t, struct sigevent *__restrict, timer_t *__restrict);
112int timer_delete (timer_t);
113int timer_settime (timer_t, int, const struct itimerspec *__restrict, struct itimerspec *__restrict);
114int timer_gettime (timer_t, struct itimerspec *);
115int timer_getoverrun (timer_t);
116
117extern char *tzname[2];
118
119#endif
120
121
122#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
123char *strptime (const char *__restrict, const char *__restrict, struct tm *__restrict);
124extern int daylight;
125extern long timezone;
126extern int getdate_err;
127struct tm *getdate (const char *);
128#endif
129
130
131#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
132int stime(const time_t *);
133time_t timegm(struct tm *);
134#endif
135
136#if _REDIR_TIME64
137__REDIR(time, __time64);
138__REDIR(difftime, __difftime64);
139__REDIR(mktime, __mktime64);
140__REDIR(gmtime, __gmtime64);
141__REDIR(localtime, __localtime64);
142__REDIR(ctime, __ctime64);
143__REDIR(timespec_get, __timespec_get_time64);
144#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
145 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
146 || defined(_BSD_SOURCE)
147__REDIR(gmtime_r, __gmtime64_r);
148__REDIR(localtime_r, __localtime64_r);
149__REDIR(ctime_r, __ctime64_r);
150__REDIR(nanosleep, __nanosleep_time64);
151__REDIR(clock_getres, __clock_getres_time64);
152__REDIR(clock_gettime, __clock_gettime64);
153__REDIR(clock_settime, __clock_settime64);
154__REDIR(clock_nanosleep, __clock_nanosleep_time64);
155__REDIR(timer_settime, __timer_settime64);
156__REDIR(timer_gettime, __timer_gettime64);
157#endif
158#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
159__REDIR(stime, __stime64);
160__REDIR(timegm, __timegm_time64);
161#endif
162#endif
163
164#ifdef __cplusplus
165}
166#endif
167
168
169#endif
170