Commit | Line | Data |
---|---|---|
4a626d0a PA |
1 | /* Provide a more complete sys/time.h. |
2 | ||
5df4cba6 | 3 | Copyright (C) 2007-2020 Free Software Foundation, Inc. |
4a626d0a PA |
4 | |
5 | This program is free software; you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation; either version 3, or (at your option) | |
8 | any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
c0c3707f | 16 | along with this program; if not, see <https://www.gnu.org/licenses/>. */ |
4a626d0a PA |
17 | |
18 | /* Written by Paul Eggert. */ | |
19 | ||
20 | #ifndef _@GUARD_PREFIX@_SYS_TIME_H | |
21 | ||
22 | #if __GNUC__ >= 3 | |
23 | @PRAGMA_SYSTEM_HEADER@ | |
24 | #endif | |
25 | @PRAGMA_COLUMNS@ | |
26 | ||
27 | /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself | |
28 | recursively via <sys/select.h>. | |
29 | Simply delegate to the system's header in this case; it is a no-op. | |
30 | Without this extra ifdef, the C++ gettimeofday declaration below | |
31 | would be a forward declaration in gnulib's nested <sys/time.h>. */ | |
32 | #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ | |
33 | # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ | |
34 | #else | |
35 | ||
36 | /* The include_next requires a split double-inclusion guard. */ | |
37 | #if @HAVE_SYS_TIME_H@ | |
38 | # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ | |
39 | #endif | |
40 | ||
41 | #ifndef _@GUARD_PREFIX@_SYS_TIME_H | |
42 | #define _@GUARD_PREFIX@_SYS_TIME_H | |
43 | ||
44 | #if ! @HAVE_SYS_TIME_H@ | |
45 | # include <time.h> | |
46 | #endif | |
47 | ||
48 | /* On native Windows with MSVC, get the 'struct timeval' type. | |
49 | Also, on native Windows with a 64-bit time_t, where we are overriding the | |
50 | 'struct timeval' type, get all declarations of system functions whose | |
51 | signature contains 'struct timeval'. */ | |
52 | #if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H | |
53 | # define _GL_INCLUDING_WINSOCK2_H | |
54 | # include <winsock2.h> | |
55 | # undef _GL_INCLUDING_WINSOCK2_H | |
56 | #endif | |
57 | ||
58 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ | |
59 | ||
60 | /* The definition of _GL_ARG_NONNULL is copied here. */ | |
61 | ||
62 | /* The definition of _GL_WARN_ON_USE is copied here. */ | |
63 | ||
64 | #ifdef __cplusplus | |
65 | extern "C" { | |
66 | #endif | |
67 | ||
68 | #if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ | |
69 | ||
70 | # if @REPLACE_STRUCT_TIMEVAL@ | |
71 | # define timeval rpl_timeval | |
72 | # endif | |
73 | ||
74 | # if !GNULIB_defined_struct_timeval | |
75 | struct timeval | |
76 | { | |
77 | time_t tv_sec; | |
78 | long int tv_usec; | |
79 | }; | |
80 | # define GNULIB_defined_struct_timeval 1 | |
81 | # endif | |
82 | ||
83 | #endif | |
84 | ||
85 | #ifdef __cplusplus | |
86 | } | |
87 | #endif | |
88 | ||
89 | #if @GNULIB_GETTIMEOFDAY@ | |
90 | # if @REPLACE_GETTIMEOFDAY@ | |
91 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
92 | # undef gettimeofday | |
93 | # define gettimeofday rpl_gettimeofday | |
94 | # endif | |
95 | _GL_FUNCDECL_RPL (gettimeofday, int, | |
96 | (struct timeval *restrict, void *restrict) | |
97 | _GL_ARG_NONNULL ((1))); | |
98 | _GL_CXXALIAS_RPL (gettimeofday, int, | |
99 | (struct timeval *restrict, void *restrict)); | |
100 | # else | |
101 | # if !@HAVE_GETTIMEOFDAY@ | |
102 | _GL_FUNCDECL_SYS (gettimeofday, int, | |
103 | (struct timeval *restrict, void *restrict) | |
104 | _GL_ARG_NONNULL ((1))); | |
105 | # endif | |
106 | /* Need to cast, because on glibc systems, by default, the second argument is | |
107 | struct timezone *. */ | |
108 | _GL_CXXALIAS_SYS_CAST (gettimeofday, int, | |
109 | (struct timeval *restrict, void *restrict)); | |
110 | # endif | |
111 | _GL_CXXALIASWARN (gettimeofday); | |
4c62b19f PA |
112 | # if defined __cplusplus && defined GNULIB_NAMESPACE |
113 | namespace GNULIB_NAMESPACE { | |
114 | typedef ::timeval | |
c0c3707f | 115 | # undef timeval |
4c62b19f | 116 | timeval; |
c0c3707f CB |
117 | # if @REPLACE_STRUCT_TIMEVAL@ |
118 | # define timeval rpl_timeval | |
119 | typedef ::timeval timeval; | |
120 | # endif | |
4c62b19f PA |
121 | } |
122 | # endif | |
4a626d0a PA |
123 | #elif defined GNULIB_POSIXCHECK |
124 | # undef gettimeofday | |
125 | # if HAVE_RAW_DECL_GETTIMEOFDAY | |
126 | _GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " | |
127 | "use gnulib module gettimeofday for portability"); | |
128 | # endif | |
129 | #endif | |
130 | ||
131 | /* Hide some function declarations from <winsock2.h>. */ | |
132 | ||
133 | #if defined _MSC_VER && @HAVE_WINSOCK2_H@ | |
134 | # if !defined _@GUARD_PREFIX@_UNISTD_H | |
135 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
136 | # undef close | |
137 | # define close close_used_without_including_unistd_h | |
138 | # else | |
139 | _GL_WARN_ON_USE (close, | |
140 | "close() used without including <unistd.h>"); | |
141 | # endif | |
142 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
143 | # undef gethostname | |
144 | # define gethostname gethostname_used_without_including_unistd_h | |
145 | # else | |
146 | _GL_WARN_ON_USE (gethostname, | |
147 | "gethostname() used without including <unistd.h>"); | |
148 | # endif | |
149 | # endif | |
150 | # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H | |
151 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
152 | # undef socket | |
153 | # define socket socket_used_without_including_sys_socket_h | |
154 | # undef connect | |
155 | # define connect connect_used_without_including_sys_socket_h | |
156 | # undef accept | |
157 | # define accept accept_used_without_including_sys_socket_h | |
158 | # undef bind | |
159 | # define bind bind_used_without_including_sys_socket_h | |
160 | # undef getpeername | |
161 | # define getpeername getpeername_used_without_including_sys_socket_h | |
162 | # undef getsockname | |
163 | # define getsockname getsockname_used_without_including_sys_socket_h | |
164 | # undef getsockopt | |
165 | # define getsockopt getsockopt_used_without_including_sys_socket_h | |
166 | # undef listen | |
167 | # define listen listen_used_without_including_sys_socket_h | |
168 | # undef recv | |
169 | # define recv recv_used_without_including_sys_socket_h | |
170 | # undef send | |
171 | # define send send_used_without_including_sys_socket_h | |
172 | # undef recvfrom | |
173 | # define recvfrom recvfrom_used_without_including_sys_socket_h | |
174 | # undef sendto | |
175 | # define sendto sendto_used_without_including_sys_socket_h | |
176 | # undef setsockopt | |
177 | # define setsockopt setsockopt_used_without_including_sys_socket_h | |
178 | # undef shutdown | |
179 | # define shutdown shutdown_used_without_including_sys_socket_h | |
180 | # else | |
181 | _GL_WARN_ON_USE (socket, | |
182 | "socket() used without including <sys/socket.h>"); | |
183 | _GL_WARN_ON_USE (connect, | |
184 | "connect() used without including <sys/socket.h>"); | |
185 | _GL_WARN_ON_USE (accept, | |
186 | "accept() used without including <sys/socket.h>"); | |
187 | _GL_WARN_ON_USE (bind, | |
188 | "bind() used without including <sys/socket.h>"); | |
189 | _GL_WARN_ON_USE (getpeername, | |
190 | "getpeername() used without including <sys/socket.h>"); | |
191 | _GL_WARN_ON_USE (getsockname, | |
192 | "getsockname() used without including <sys/socket.h>"); | |
193 | _GL_WARN_ON_USE (getsockopt, | |
194 | "getsockopt() used without including <sys/socket.h>"); | |
195 | _GL_WARN_ON_USE (listen, | |
196 | "listen() used without including <sys/socket.h>"); | |
197 | _GL_WARN_ON_USE (recv, | |
198 | "recv() used without including <sys/socket.h>"); | |
199 | _GL_WARN_ON_USE (send, | |
200 | "send() used without including <sys/socket.h>"); | |
201 | _GL_WARN_ON_USE (recvfrom, | |
202 | "recvfrom() used without including <sys/socket.h>"); | |
203 | _GL_WARN_ON_USE (sendto, | |
204 | "sendto() used without including <sys/socket.h>"); | |
205 | _GL_WARN_ON_USE (setsockopt, | |
206 | "setsockopt() used without including <sys/socket.h>"); | |
207 | _GL_WARN_ON_USE (shutdown, | |
208 | "shutdown() used without including <sys/socket.h>"); | |
209 | # endif | |
210 | # endif | |
211 | # if !defined _@GUARD_PREFIX@_SYS_SELECT_H | |
212 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE) | |
213 | # undef select | |
214 | # define select select_used_without_including_sys_select_h | |
215 | # else | |
216 | _GL_WARN_ON_USE (select, | |
217 | "select() used without including <sys/select.h>"); | |
218 | # endif | |
219 | # endif | |
220 | #endif | |
221 | ||
222 | #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ | |
223 | #endif /* _CYGWIN_SYS_TIME_H */ | |
224 | #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ |