1 /* Header for poll(2) emulation
2 Contributed by Paolo Bonzini.
3
4 Copyright 2001-2003, 2007, 2009-2021 Free Software Foundation, Inc.
5
6 This file is part of gnulib.
7
8 This file is free software: you can redistribute it and/or modify
9 it under the terms of the GNU Lesser General Public License as
10 published by the Free Software Foundation; either version 2.1 of the
11 License, or (at your option) any later version.
12
13 This file is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with this program. If not, see <https://www.gnu.org/licenses/>. */
20
21 #ifndef _@GUARD_PREFIX@_POLL_H
22
23 #if __GNUC__ >= 3
24 @PRAGMA_SYSTEM_HEADER@
25 #endif
26 @PRAGMA_COLUMNS@
27
28 /* The include_next requires a split double-inclusion guard. */
29 #if @HAVE_POLL_H@
30 # @INCLUDE_NEXT@ @NEXT_POLL_H@
31 #endif
32
33 #ifndef _@GUARD_PREFIX@_POLL_H
34 #define _@GUARD_PREFIX@_POLL_H
35
36 /* On native Windows, get the 'struct pollfd' type and the POLL* macro
37 definitions before we override them. mingw defines them in <winsock2.h>
38 if _WIN32_WINNT >= 0x0600. */
39 #if @HAVE_WINSOCK2_H@
40 # include <winsock2.h>
41 #endif
42
43
44 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
45
46 /* The definition of _GL_WARN_ON_USE is copied here. */
47
48
49 #if !@HAVE_POLL_H@
50
51 # if @HAVE_WINSOCK2_H@
52 /* Override the definitions from <winsock2.h>. */
53 # undef POLLIN
54 # undef POLLPRI
55 # undef POLLOUT
56 # undef POLLERR
57 # undef POLLHUP
58 # undef POLLNVAL
59 # undef POLLRDNORM
60 # undef POLLRDBAND
61 # undef POLLWRNORM
62 # undef POLLWRBAND
63 # define pollfd rpl_pollfd
64 # endif
65
66 /* fake a poll(2) environment */
67 # define POLLIN 0x0001 /* any readable data available */
68 # define POLLPRI 0x0002 /* OOB/Urgent readable data */
69 # define POLLOUT 0x0004 /* file descriptor is writable */
70 # define POLLERR 0x0008 /* some poll error occurred */
71 # define POLLHUP 0x0010 /* file descriptor was "hung up" */
72 # define POLLNVAL 0x0020 /* requested events "invalid" */
73 # define POLLRDNORM 0x0040
74 # define POLLRDBAND 0x0080
75 # define POLLWRNORM 0x0100
76 # define POLLWRBAND 0x0200
77
78 # if !GNULIB_defined_poll_types
79
80 struct pollfd
81 {
82 int fd; /* which file descriptor to poll */
83 short events; /* events we are interested in */
84 short revents; /* events found on return */
85 };
86
87 typedef unsigned long nfds_t;
88
89 # define GNULIB_defined_poll_types 1
90 # endif
91
92 /* Define INFTIM only if doing so conforms to POSIX. */
93 # if !defined (_POSIX_C_SOURCE) && !defined (_XOPEN_SOURCE)
94 # define INFTIM (-1)
95 # endif
96
97 #endif
98
99
100 #if @GNULIB_POLL@
101 # if @REPLACE_POLL@
102 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
103 # undef poll
104 # define poll rpl_poll
105 # endif
106 _GL_FUNCDECL_RPL (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout));
107 _GL_CXXALIAS_RPL (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout));
108 # else
109 # if !@HAVE_POLL@
110 _GL_FUNCDECL_SYS (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout));
111 # endif
112 _GL_CXXALIAS_SYS (poll, int, (struct pollfd *pfd, nfds_t nfd, int timeout));
113 # endif
114 _GL_CXXALIASWARN (poll);
115 #elif defined GNULIB_POSIXCHECK
116 # undef poll
117 # if HAVE_RAW_DECL_POLL
118 _GL_WARN_ON_USE (poll, "poll is unportable - "
119 "use gnulib module poll for portability");
120 # endif
121 #endif
122
123
124 #endif /* _@GUARD_PREFIX@_POLL_H */
125 #endif /* _@GUARD_PREFIX@_POLL_H */