ReactOS 0.4.16-dev-297-gc569aee
time.h
Go to the documentation of this file.
1/* @(#)time.h 1.20 13/10/01 Copyright 1996-2013 J. Schilling */
2/*
3 * Generic header for users of time(), gettimeofday() ...
4 *
5 * It includes definitions for time_t, struct timeval, ...
6 *
7 * Copyright (c) 1996-2013 J. Schilling
8 */
9/*
10 * The contents of this file are subject to the terms of the
11 * Common Development and Distribution License, Version 1.0 only
12 * (the "License"). You may not use this file except in compliance
13 * with the License.
14 *
15 * See the file CDDL.Schily.txt in this distribution for details.
16 * A copy of the CDDL is also available via the Internet at
17 * http://www.opensource.org/licenses/cddl1.txt
18 *
19 * When distributing Covered Code, include this CDDL HEADER in each
20 * file and include the License file CDDL.Schily.txt from this distribution.
21 */
22
23#ifndef _SCHILY_TIME_H
24#define _SCHILY_TIME_H
25
26#ifndef _SCHILY_MCONFIG_H
27#include <schily/mconfig.h>
28#endif
29
30#ifndef _SCHILY_TYPES_H
31#include <schily/types.h> /* Needed for time_t */
32#endif
33
34#ifdef TIME_WITH_SYS_TIME
35# ifndef _INCL_SYS_TIME_H
36# include <sys/time.h>
37# define _INCL_SYS_TIME_H
38# endif
39# ifndef _INCL_TIME_H
40# include <time.h>
41# define _INCL_TIME_H
42# endif
43#else
44#ifdef HAVE_SYS_TIME_H
45# ifndef _INCL_SYS_TIME_H
46# include <sys/time.h>
47# define _INCL_SYS_TIME_H
48# endif
49#else
50# ifndef _INCL_TIME_H
51# include <time.h>
52# define _INCL_TIME_H
53# endif
54#endif
55#endif
56
57#ifdef __cplusplus
58extern "C" {
59#endif
60
61#ifdef timerclear
62/*
63 * With MSVC timerclear / struct timeval present in case that
64 * winsock2.h has been included before.
65 */
66#undef HAVE_STRUCT_TIMEVAL
67#define HAVE_STRUCT_TIMEVAL 1
68#endif
69
70#ifndef HAVE_STRUCT_TIMEVAL
71
72struct timeval {
73 long tv_sec;
74 long tv_usec;
75};
76#endif
77
78#ifndef HAVE_STRUCT_TIMEZONE
79
80struct timezone {
82 int tz_dsttime;
83};
84#endif
85
86#ifndef HAVE_STRUCT_TIMESPEC
87
88struct timespec {
90 long tv_nsec;
91};
92#endif
93
94
95#undef timerclear
96#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
97
98#undef timerfix
99#define timerfix1(tvp) while ((tvp)->tv_usec < 0) { \
100 (tvp)->tv_sec--; \
101 (tvp)->tv_usec += 1000000; \
102 }
103
104#define timerfix2(tvp) while ((tvp)->tv_usec > 1000000) { \
105 (tvp)->tv_sec++; \
106 (tvp)->tv_usec -= 1000000; \
107 }
108
109#define timerfix(tvp) do { timerfix1(tvp); timerfix2(tvp); } while (0)
110
111/*
112 * timersub() and timeradd() are defined on FreeBSD with a different
113 * interface (3 parameters).
114 */
115#undef timersub
116#define timersub(tvp1, tvp2) do { \
117 (tvp1)->tv_sec -= (tvp2)->tv_sec; \
118 (tvp1)->tv_usec -= (tvp2)->tv_usec; \
119 timerfix1(tvp1); timerfix2(tvp1); \
120 } while (0)
121
122#undef timeradd
123#define timeradd(tvp1, tvp2) do { \
124 (tvp1)->tv_sec += (tvp2)->tv_sec; \
125 (tvp1)->tv_usec += (tvp2)->tv_usec; \
126 timerfix1(tvp1); timerfix2(tvp1); \
127 } while (0)
128
129
130#undef timespecclear
131#define timespecclear(tsp) (tsp)->tv_sec = (tsp)->tv_nsec = 0
132
133#undef timespecfix
134#define timespecfix1(tsp) while ((tsp)->tv_nsec < 0) { \
135 (tsp)->tv_sec--; \
136 (tsp)->tv_nsec += 1000000000; \
137 }
138
139#define timespecfix2(tsp) while ((tsp)->tv_nsec > 1000000000) { \
140 (tsp)->tv_sec++; \
141 (tsp)->tv_nsec -= 1000000000; \
142 }
143
144#define timespecfix(tsp) do { timespecfix1(tsp); timespecfix2(tsp); } while (0)
145
146#undef timespecsub
147#define timespecsub(tsp1, tsp2) do { \
148 (tsp1)->tv_sec -= (tsp2)->tv_sec; \
149 (tsp1)->tv_nsec -= (tsp2)->tv_nsec; \
150 timespecfix1(tsp1); timespecfix2(tsp1); \
151 } while (0)
152
153#undef timespecadd
154#define timespecadd(tsp1, tsp2) do { \
155 (tsp1)->tv_sec += (tsp2)->tv_sec; \
156 (tsp1)->tv_nsec += (tsp2)->tv_nsec; \
157 timespecfix1(tsp1); timespecfix2(tsp1); \
158 } while (0)
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif /* _SCHILY_TIME_H */
__kernel_time_t time_t
Definition: linux.h:252
Definition: time.h:88
long tv_nsec
Definition: time.h:90
time_t tv_sec
Definition: time.h:89
unsigned long tv_sec
Definition: linux.h:1738
unsigned long tv_usec
Definition: linux.h:1739
Definition: fake.h:14
int tz_minuteswest
Definition: fake.h:15
int tz_dsttime
Definition: fake.h:16