sys_time.in.h 7.74 KB
Newer Older
1 2
/* Provide a more complete sys/time.h.

Paul Eggert's avatar
Paul Eggert committed
3
   Copyright (C) 2007-2020 Free Software Foundation, Inc.
4 5 6 7 8 9 10 11 12 13 14 15

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
Paul Eggert's avatar
Paul Eggert committed
16
   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
17 18 19

/* Written by Paul Eggert.  */

Paul Eggert's avatar
Paul Eggert committed
20 21
#ifndef _@GUARD_PREFIX@_SYS_TIME_H

22 23 24 25 26
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@

Paul Eggert's avatar
Paul Eggert committed
27 28
/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself
   recursively via <sys/select.h>.
Paul Eggert's avatar
Paul Eggert committed
29 30 31
   Simply delegate to the system's header in this case; it is a no-op.
   Without this extra ifdef, the C++ gettimeofday declaration below
   would be a forward declaration in gnulib's nested <sys/time.h>.  */
Paul Eggert's avatar
Paul Eggert committed
32
#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_
Paul Eggert's avatar
Paul Eggert committed
33 34 35
# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
#else

Paul Eggert's avatar
Paul Eggert committed
36 37 38 39
/* The include_next requires a split double-inclusion guard.  */
#if @HAVE_SYS_TIME_H@
# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
#endif
40

Paul Eggert's avatar
Paul Eggert committed
41 42
#ifndef _@GUARD_PREFIX@_SYS_TIME_H
#define _@GUARD_PREFIX@_SYS_TIME_H
43

Paul Eggert's avatar
Paul Eggert committed
44 45 46
#if ! @HAVE_SYS_TIME_H@
# include <time.h>
#endif
47 48 49 50 51

/* On native Windows with MSVC, get the 'struct timeval' type.
   Also, on native Windows with a 64-bit time_t, where we are overriding the
   'struct timeval' type, get all declarations of system functions whose
   signature contains 'struct timeval'.  */
Paul Eggert's avatar
Paul Eggert committed
52 53 54 55 56
#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H
# define _GL_INCLUDING_WINSOCK2_H
# include <winsock2.h>
# undef _GL_INCLUDING_WINSOCK2_H
#endif
57 58 59 60 61 62 63

/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */

/* The definition of _GL_ARG_NONNULL is copied here.  */

/* The definition of _GL_WARN_ON_USE is copied here.  */

Paul Eggert's avatar
Paul Eggert committed
64
#ifdef __cplusplus
65
extern "C" {
Paul Eggert's avatar
Paul Eggert committed
66
#endif
67

Paul Eggert's avatar
Paul Eggert committed
68
#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@
69

Paul Eggert's avatar
Paul Eggert committed
70 71 72
# if @REPLACE_STRUCT_TIMEVAL@
#  define timeval rpl_timeval
# endif
73

Paul Eggert's avatar
Paul Eggert committed
74
# if !GNULIB_defined_struct_timeval
75 76 77 78 79
struct timeval
{
  time_t tv_sec;
  long int tv_usec;
};
Paul Eggert's avatar
Paul Eggert committed
80
#  define GNULIB_defined_struct_timeval 1
81 82
# endif

Paul Eggert's avatar
Paul Eggert committed
83 84 85
#endif

#ifdef __cplusplus
86
}
Paul Eggert's avatar
Paul Eggert committed
87
#endif
88

Paul Eggert's avatar
Paul Eggert committed
89 90 91 92 93 94
#if @GNULIB_GETTIMEOFDAY@
# if @REPLACE_GETTIMEOFDAY@
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
#   undef gettimeofday
#   define gettimeofday rpl_gettimeofday
#  endif
95 96 97 98 99
_GL_FUNCDECL_RPL (gettimeofday, int,
                  (struct timeval *restrict, void *restrict)
                  _GL_ARG_NONNULL ((1)));
_GL_CXXALIAS_RPL (gettimeofday, int,
                  (struct timeval *restrict, void *restrict));
Paul Eggert's avatar
Paul Eggert committed
100 101
# else
#  if !@HAVE_GETTIMEOFDAY@
102 103 104
_GL_FUNCDECL_SYS (gettimeofday, int,
                  (struct timeval *restrict, void *restrict)
                  _GL_ARG_NONNULL ((1)));
Paul Eggert's avatar
Paul Eggert committed
105
#  endif
106 107 108 109
/* Need to cast, because on glibc systems, by default, the second argument is
                                                  struct timezone *.  */
_GL_CXXALIAS_SYS_CAST (gettimeofday, int,
                       (struct timeval *restrict, void *restrict));
Paul Eggert's avatar
Paul Eggert committed
110
# endif
111
_GL_CXXALIASWARN (gettimeofday);
Paul Eggert's avatar
Paul Eggert committed
112 113 114
# if defined __cplusplus && defined GNULIB_NAMESPACE
namespace GNULIB_NAMESPACE {
  typedef ::timeval
Paul Eggert's avatar
Paul Eggert committed
115
#  undef timeval
Paul Eggert's avatar
Paul Eggert committed
116
    timeval;
Paul Eggert's avatar
Paul Eggert committed
117 118 119 120
#  if @REPLACE_STRUCT_TIMEVAL@
#   define timeval rpl_timeval
  typedef ::timeval timeval;
#  endif
Paul Eggert's avatar
Paul Eggert committed
121 122
}
# endif
Paul Eggert's avatar
Paul Eggert committed
123 124 125
#elif defined GNULIB_POSIXCHECK
# undef gettimeofday
# if HAVE_RAW_DECL_GETTIMEOFDAY
126 127 128
_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - "
                 "use gnulib module gettimeofday for portability");
# endif
Paul Eggert's avatar
Paul Eggert committed
129
#endif
130 131 132

/* Hide some function declarations from <winsock2.h>.  */

Paul Eggert's avatar
Paul Eggert committed
133 134 135 136 137 138
#if defined _MSC_VER && @HAVE_WINSOCK2_H@
# if !defined _@GUARD_PREFIX@_UNISTD_H
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
#   undef close
#   define close close_used_without_including_unistd_h
#  else
139 140
     _GL_WARN_ON_USE (close,
                      "close() used without including <unistd.h>");
Paul Eggert's avatar
Paul Eggert committed
141 142 143 144 145
#  endif
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
#   undef gethostname
#   define gethostname gethostname_used_without_including_unistd_h
#  else
146 147 148
     _GL_WARN_ON_USE (gethostname,
                      "gethostname() used without including <unistd.h>");
#  endif
Paul Eggert's avatar
Paul Eggert committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
# endif
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
#   undef socket
#   define socket              socket_used_without_including_sys_socket_h
#   undef connect
#   define connect             connect_used_without_including_sys_socket_h
#   undef accept
#   define accept              accept_used_without_including_sys_socket_h
#   undef bind
#   define bind                bind_used_without_including_sys_socket_h
#   undef getpeername
#   define getpeername         getpeername_used_without_including_sys_socket_h
#   undef getsockname
#   define getsockname         getsockname_used_without_including_sys_socket_h
#   undef getsockopt
#   define getsockopt          getsockopt_used_without_including_sys_socket_h
#   undef listen
#   define listen              listen_used_without_including_sys_socket_h
#   undef recv
#   define recv                recv_used_without_including_sys_socket_h
#   undef send
#   define send                send_used_without_including_sys_socket_h
#   undef recvfrom
#   define recvfrom            recvfrom_used_without_including_sys_socket_h
#   undef sendto
#   define sendto              sendto_used_without_including_sys_socket_h
#   undef setsockopt
#   define setsockopt          setsockopt_used_without_including_sys_socket_h
#   undef shutdown
#   define shutdown            shutdown_used_without_including_sys_socket_h
#  else
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
     _GL_WARN_ON_USE (socket,
                      "socket() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (connect,
                      "connect() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (accept,
                      "accept() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (bind,
                      "bind() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (getpeername,
                      "getpeername() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (getsockname,
                      "getsockname() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (getsockopt,
                      "getsockopt() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (listen,
                      "listen() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (recv,
                      "recv() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (send,
                      "send() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (recvfrom,
                      "recvfrom() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (sendto,
                      "sendto() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (setsockopt,
                      "setsockopt() used without including <sys/socket.h>");
     _GL_WARN_ON_USE (shutdown,
                      "shutdown() used without including <sys/socket.h>");
#  endif
Paul Eggert's avatar
Paul Eggert committed
210 211 212 213 214 215
# endif
# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
#   undef select
#   define select select_used_without_including_sys_select_h
#  else
216 217 218 219
     _GL_WARN_ON_USE (select,
                      "select() used without including <sys/select.h>");
#  endif
# endif
Paul Eggert's avatar
Paul Eggert committed
220
#endif
221 222

#endif /* _@GUARD_PREFIX@_SYS_TIME_H */
Paul Eggert's avatar
Paul Eggert committed
223
#endif /* _CYGWIN_SYS_TIME_H */
Paul Eggert's avatar
Paul Eggert committed
224
#endif /* _@GUARD_PREFIX@_SYS_TIME_H */