1/*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1989, 1993
5 *	The Regents of the University of California.  All rights reserved.
6 * (c) UNIX System Laboratories, Inc.
7 * All or some portions of this file are derived from material licensed
8 * to the University of California by American Telephone and Telegraph
9 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10 * the permission of UNIX System Laboratories, Inc.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 * 3. Neither the name of the University nor the names of its contributors
21 *    may be used to endorse or promote products derived from this software
22 *    without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 *	@(#)time.h	8.3 (Berkeley) 1/21/94
37 */
38
39/*
40 * $FreeBSD$
41 */
42
43#ifndef _TIME_H_
44#define	_TIME_H_
45
46#include <sys/cdefs.h>
47#include <sys/_null.h>
48#include <sys/_types.h>
49
50#if __POSIX_VISIBLE > 0 && __POSIX_VISIBLE < 200112 || __BSD_VISIBLE
51/*
52 * Frequency of the clock ticks reported by times().  Deprecated - use
53 * sysconf(_SC_CLK_TCK) instead.  (Removed in 1003.1-2001.)
54 */
55#define	CLK_TCK		128
56#endif
57
58/* Frequency of the clock ticks reported by clock().  */
59#define	CLOCKS_PER_SEC	128
60
61#ifndef _CLOCK_T_DECLARED
62typedef	__clock_t	clock_t;
63#define	_CLOCK_T_DECLARED
64#endif
65
66#ifndef _TIME_T_DECLARED
67typedef	__time_t	time_t;
68#define	_TIME_T_DECLARED
69#endif
70
71#ifndef _SIZE_T_DECLARED
72typedef	__size_t	size_t;
73#define	_SIZE_T_DECLARED
74#endif
75
76#if __POSIX_VISIBLE >= 199309
77/*
78 * New in POSIX 1003.1b-1993.
79 */
80#ifndef _CLOCKID_T_DECLARED
81typedef	__clockid_t	clockid_t;
82#define	_CLOCKID_T_DECLARED
83#endif
84
85#ifndef _TIMER_T_DECLARED
86typedef	__timer_t	timer_t;
87#define	_TIMER_T_DECLARED
88#endif
89
90#include <sys/timespec.h>
91#endif /* __POSIX_VISIBLE >= 199309 */
92
93#if __POSIX_VISIBLE >= 200112
94#ifndef _PID_T_DECLARED
95typedef	__pid_t		pid_t;
96#define	_PID_T_DECLARED
97#endif
98#endif
99
100/* These macros are also in sys/time.h. */
101#if !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 199506
102#define CLOCK_REALTIME	0
103#endif /* !defined(CLOCK_REALTIME) && __POSIX_VISIBLE >= 199506 */
104#if !defined(CLOCK_VIRTUAL) && __BSD_VISIBLE
105#define CLOCK_VIRTUAL	1
106#define CLOCK_PROF	2
107#endif /* !defined(CLOCK_VIRTUAL) && __BSD_VISIBLE */
108#if !defined(CLOCK_MONOTONIC) && __POSIX_VISIBLE >= 200112
109#define CLOCK_MONOTONIC	4
110#define CLOCK_UPTIME	5		/* FreeBSD-specific. */
111#define CLOCK_UPTIME_PRECISE	7	/* FreeBSD-specific. */
112#define CLOCK_UPTIME_FAST	8	/* FreeBSD-specific. */
113#define CLOCK_REALTIME_PRECISE	9	/* FreeBSD-specific. */
114#define CLOCK_REALTIME_FAST	10	/* FreeBSD-specific. */
115#define CLOCK_MONOTONIC_PRECISE	11	/* FreeBSD-specific. */
116#define CLOCK_MONOTONIC_FAST	12	/* FreeBSD-specific. */
117#define CLOCK_SECOND	13		/* FreeBSD-specific. */
118#define CLOCK_THREAD_CPUTIME_ID	14
119#define	CLOCK_PROCESS_CPUTIME_ID	15
120#endif /* !defined(CLOCK_MONOTONIC) && __POSIX_VISIBLE >= 200112 */
121
122#if __BSD_VISIBLE
123#define TIMER_RELTIME	0x0	/* relative timer */
124#endif
125#if !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 199506
126#define TIMER_ABSTIME	0x1	/* absolute timer */
127#endif /* !defined(TIMER_ABSTIME) && __POSIX_VISIBLE >= 199506 */
128
129struct tm {
130	int	tm_sec;		/* seconds after the minute [0-60] */
131	int	tm_min;		/* minutes after the hour [0-59] */
132	int	tm_hour;	/* hours since midnight [0-23] */
133	int	tm_mday;	/* day of the month [1-31] */
134	int	tm_mon;		/* months since January [0-11] */
135	int	tm_year;	/* years since 1900 */
136	int	tm_wday;	/* days since Sunday [0-6] */
137	int	tm_yday;	/* days since January 1 [0-365] */
138	int	tm_isdst;	/* Daylight Savings Time flag */
139	long	tm_gmtoff;	/* offset from UTC in seconds */
140	char	*tm_zone;	/* timezone abbreviation */
141};
142
143#if __POSIX_VISIBLE
144extern char *tzname[];
145#endif
146
147__BEGIN_DECLS
148char *asctime(const struct tm *);
149clock_t clock(void);
150char *ctime(const time_t *);
151#ifndef _STANDALONE
152double difftime(time_t, time_t);
153#endif
154/* XXX missing: getdate() */
155struct tm *gmtime(const time_t *);
156struct tm *localtime(const time_t *);
157time_t mktime(struct tm *);
158size_t strftime(char * __restrict, size_t, const char * __restrict,
159    const struct tm * __restrict);
160time_t time(time_t *);
161#if __POSIX_VISIBLE >= 200112
162struct sigevent;
163int timer_create(clockid_t, struct sigevent *__restrict, timer_t *__restrict);
164int timer_delete(timer_t);
165int timer_gettime(timer_t, struct itimerspec *);
166int timer_getoverrun(timer_t);
167int timer_settime(timer_t, int, const struct itimerspec *__restrict,
168	struct itimerspec *__restrict);
169#endif
170#if __POSIX_VISIBLE
171void tzset(void);
172#endif
173
174#if __POSIX_VISIBLE >= 199309
175int clock_getres(clockid_t, struct timespec *);
176int clock_gettime(clockid_t, struct timespec *);
177int clock_settime(clockid_t, const struct timespec *);
178int nanosleep(const struct timespec *, struct timespec *);
179#endif /* __POSIX_VISIBLE >= 199309 */
180
181#if __POSIX_VISIBLE >= 200112
182int clock_getcpuclockid(pid_t, clockid_t *);
183int clock_nanosleep(clockid_t, int, const struct timespec *, struct timespec *);
184#endif
185
186#if __POSIX_VISIBLE >= 199506
187char *asctime_r(const struct tm *, char *);
188char *ctime_r(const time_t *, char *);
189struct tm *gmtime_r(const time_t *, struct tm *);
190struct tm *localtime_r(const time_t *, struct tm *);
191#endif
192
193#if __XSI_VISIBLE
194char *strptime(const char * __restrict, const char * __restrict,
195    struct tm * __restrict);
196#endif
197
198#if __BSD_VISIBLE
199char *timezone(int, int);	/* XXX XSI conflict */
200void tzsetwall(void);
201time_t timelocal(struct tm * const);
202time_t timegm(struct tm * const);
203int timer_oshandle_np(timer_t timerid);
204time_t time2posix(time_t t);
205time_t posix2time(time_t t);
206#endif /* __BSD_VISIBLE */
207
208#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
209#include <xlocale/_time.h>
210#endif
211
212#if defined(__BSD_VISIBLE) || __ISO_C_VISIBLE >= 2011 || \
213    (defined(__cplusplus) && __cplusplus >= 201703)
214#include <sys/_timespec.h>
215/* ISO/IEC 9899:201x 7.27.2.5 The timespec_get function */
216#define TIME_UTC	1	/* time elapsed since epoch */
217int timespec_get(struct timespec *ts, int base);
218#endif
219
220__END_DECLS
221
222#endif /* !_TIME_H_ */
223