ReactOS  0.4.14-dev-337-gf981a68
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
58 extern "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 
72 struct timeval {
73  long tv_sec;
74  long tv_usec;
75 };
76 #endif
77 
78 #ifndef HAVE_STRUCT_TIMEZONE
79 
80 struct timezone {
81  int tz_minuteswest;
82  int tz_dsttime;
83 };
84 #endif
85 
86 #ifndef HAVE_STRUCT_TIMESPEC
87 
88 struct 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 */
int tz_dsttime
Definition: fake.h:16
unsigned long tv_sec
Definition: linux.h:1738
time_t tv_sec
Definition: time.h:89
unsigned long tv_usec
Definition: linux.h:1739
long tv_nsec
Definition: time.h:90
__kernel_time_t time_t
Definition: linux.h:252
Definition: time.h:88
Definition: fake.h:14
int tz_minuteswest
Definition: fake.h:15