summaryrefslogtreecommitdiff
path: root/src/syspoll.h
diff options
context:
space:
mode:
authorRobert Pluim <rpluim@gmail.com>2022-05-04 17:09:07 +0200
committerRobert Pluim <rpluim@gmail.com>2022-05-05 19:30:15 +0200
commit2087e5eb2bf6cfefe74b6b589c215c2144ed9fb0 (patch)
tree27b4865f176452535ec02666b16331ecf44445d7 /src/syspoll.h
parentaebff74af27157b60a0d6549be718d85a809b985 (diff)
downloademacs-feature/more-fds.tar.gz
Allow the use of poll instead of selectfeature/more-fds
Increase the maximum number of open files allowed to 10 x FD_SETSIZE (which is what poll is limited to on macOS). * configure.ac (--with-poll): New option, default off, for requesting 'poll' support. Check for "sys/poll.h" header. (USE_POLL): New variable. (EMACS_CONFIG_FEATURES): Add USE_POLL. * etc/NEWS: Document --with-poll. * src/sysselect.h: New define EMACS_MAX_FD, defaulting to FD_SETSIZE, for the maximum number of file descriptors Emacs can use. * src/process.c: * src/sysdep.c: * src/nsterm.m (ns_select_1): (applicationDidFinishLaunching): Use EMACS_MAX_FD instead of FD_SETSIZE everywhere. * src/syspoll.h (SYSPOLL_H): New file for definitions related to use of 'poll'. * src/sysselect.h [USE_POLL]: Set EMACS_MAX_FD to 10 x FD_SETSIZE. (emacs_fd_set) [USE_POLL]: New type, used for bitsets of file descriptors. (FD_CLR, FD_ISSET, FD_SET, FD_ZERO) [USE_POLL]: Macros for manipulating bitsets. [USE_POLL]: Include "syspoll.h". * src/process.c (fd_sets_to_pollfds) [USE_POLL]: New function. Converts two 'emacs_fd_set' to an array of 'struct pollfd' (pollfds_to_fd_sets) [USE_POLL]: New function. Converts from an array of 'struct pollfd' to two 'emacs_fd_set'. (timespec_to_timeout) [USE_POLL]: New function, converts a 'struct timespec' to a timeout in milliseconds. (emacs_pselect) [USE_POLL]: Replacement for 'pselect' that calls 'poll' and does the appropriate conversions. Does not support sigmask.
Diffstat (limited to 'src/syspoll.h')
-rw-r--r--src/syspoll.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/syspoll.h b/src/syspoll.h
new file mode 100644
index 00000000000..d133794fb13
--- /dev/null
+++ b/src/syspoll.h
@@ -0,0 +1,32 @@
+/* syspoll.h - System-dependent definitions for the poll function.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs 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 of the License, or (at
+your option) any later version.
+
+GNU Emacs 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
+along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef SYSPOLL_H
+#define SYSPOLL_H 1
+
+#if !defined (DOS_NT) && !defined (WINDOWSNT)
+#include <sys/poll.h>
+
+extern int fd_sets_to_pollfds (emacs_fd_set *, emacs_fd_set *, int);
+extern void pollfds_to_fd_sets (emacs_fd_set *, emacs_fd_set *, int);
+extern int timespec_to_timeout (const struct timespec *);
+extern int emacs_pselect (int, emacs_fd_set *, emacs_fd_set *,
+ emacs_fd_set *, const struct timespec *,
+ const sigset_t *);
+#endif
+#endif