2 * Copyright (c) 2011 Petr Koupy
3 * Copyright (c) 2011 Jiri Zarevucky
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 /** @addtogroup libposix
33 /** @file Time measurement support.
39 #include "libc/time.h"
40 #include "sys/types.h"
43 #define NULL ((void *) 0)
46 #ifndef CLOCKS_PER_SEC
47 #define CLOCKS_PER_SEC (1000000L)
50 #ifndef __locale_t_defined
51 #define __locale_t_defined
52 typedef struct __posix_locale
*posix_locale_t
;
53 #ifndef LIBPOSIX_INTERNAL
54 #define locale_t posix_locale_t
58 #ifndef POSIX_SIGNAL_H_
59 struct posix_sigevent
;
60 #ifndef LIBPOSIX_INTERNAL
61 #define sigevent posix_sigevent
66 #define CLOCK_REALTIME ((posix_clockid_t) 0)
68 struct posix_timespec
{
69 time_t tv_sec
; /* Seconds. */
70 long tv_nsec
; /* Nanoseconds. */
73 struct posix_itimerspec
{
74 struct posix_timespec it_interval
; /* Timer period. */
75 struct posix_timespec it_value
; /* Timer expiration. */
78 typedef struct __posix_timer
*posix_timer_t
;
81 extern int posix_daylight
;
82 extern long posix_timezone
;
83 extern char *posix_tzname
[2];
84 extern void posix_tzset(void);
87 extern double posix_difftime(time_t time1
, time_t time0
);
89 /* Broken-down Time */
90 extern struct tm
*posix_gmtime_r(const time_t *restrict timer
,
91 struct tm
*restrict result
);
92 extern struct tm
*posix_localtime_r(const time_t *restrict timer
,
93 struct tm
*restrict result
);
95 /* Formatting Calendar Time */
96 extern char *posix_asctime_r(const struct tm
*restrict timeptr
,
98 extern char *posix_ctime_r(const time_t *timer
, char *buf
);
101 extern int posix_clock_getres(posix_clockid_t clock_id
,
102 struct posix_timespec
*res
);
103 extern int posix_clock_gettime(posix_clockid_t clock_id
,
104 struct posix_timespec
*tp
);
105 extern int posix_clock_settime(posix_clockid_t clock_id
,
106 const struct posix_timespec
*tp
);
107 extern int posix_clock_nanosleep(posix_clockid_t clock_id
, int flags
,
108 const struct posix_timespec
*rqtp
, struct posix_timespec
*rmtp
);
111 extern posix_clock_t
posix_clock(void);
113 #ifndef LIBPOSIX_INTERNAL
114 #define timespec posix_timespec
115 #define itimerspec posix_itimerspec
116 #define timer_t posix_timer_t
118 #define daylight posix_daylight
119 #define timezone posix_timezone
120 #define tzname posix_tzname
121 #define tzset posix_tzset
123 #define difftime posix_difftime
125 #define gmtime_r posix_gmtime_r
126 #define localtime_r posix_localtime_r
128 #define asctime_r posix_asctime_r
129 #define ctime_r posix_ctime_r
131 #define clock_getres posix_clock_getres
132 #define clock_gettime posix_clock_gettime
133 #define clock_settime posix_clock_settime
134 #define clock_nanosleep posix_clock_nanosleep
136 #define clock posix_clock
139 #endif // POSIX_TIME_H_