libc: move ctime() from libposix to libc
[helenos.git] / uspace / lib / posix / time.h
blob22b4c5aa893cc2d16f36ce7a490449821fb15ec5
1 /*
2 * Copyright (c) 2011 Petr Koupy
3 * Copyright (c) 2011 Jiri Zarevucky
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
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
31 * @{
33 /** @file Time measurement support.
36 #ifndef POSIX_TIME_H_
37 #define POSIX_TIME_H_
39 #include "libc/time.h"
40 #include "sys/types.h"
42 #ifndef NULL
43 #define NULL ((void *) 0)
44 #endif
46 #ifndef CLOCKS_PER_SEC
47 #define CLOCKS_PER_SEC (1000000L)
48 #endif
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
55 #endif
56 #endif
58 #ifndef POSIX_SIGNAL_H_
59 struct posix_sigevent;
60 #ifndef LIBPOSIX_INTERNAL
61 #define sigevent posix_sigevent
62 #endif
63 #endif
65 #undef CLOCK_REALTIME
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;
80 /* Timezones */
81 extern int posix_daylight;
82 extern long posix_timezone;
83 extern char *posix_tzname[2];
84 extern void posix_tzset(void);
86 /* Elapsed Time */
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,
97 char *restrict buf);
98 extern char *posix_ctime_r(const time_t *timer, char *buf);
100 /* Clocks */
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);
110 /* CPU Time */
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
137 #endif
139 #endif // POSIX_TIME_H_
141 /** @}