summaryrefslogtreecommitdiff
path: root/src/sysselect.h
diff options
context:
space:
mode:
authorPaul Eggert <eggert@penguin.cs.ucla.edu>2014-06-03 09:15:43 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2014-06-03 09:15:43 -0700
commit5897da1d746561c63719b21c5984b49a194f8209 (patch)
tree17fd7644af53ef0fb0cee898c5516a8be3141236 /src/sysselect.h
parent221e0a20f60027c6e393166b7b3d18e01d704fa3 (diff)
downloademacs-5897da1d746561c63719b21c5984b49a194f8209.tar.gz
If ENABLE_CHECKING, range-check args of FD_CLR, FD_ISSET, FD_SET.
* process.c (add_read_fd, delete_read_fd, add_write_fd) (delete_write_fd, wait_reading_process_output): Remove now-redundant easserts. * sysselect.h (SYSSELECT_H): New macro, to avoid double-inclusion woes. Use INLINE_HEADER_BEGIN, INLINE_HEADER_END. (fd_CLR, fd_ISSET, fd_SET): New inline functions. (FD_CLR, FD_ISSET, FD_SET): Redefine in terms of these functions.
Diffstat (limited to 'src/sysselect.h')
-rw-r--r--src/sysselect.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/sysselect.h b/src/sysselect.h
index b76e71a3a75..9ecc96e310c 100644
--- a/src/sysselect.h
+++ b/src/sysselect.h
@@ -16,6 +16,9 @@ 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 <http://www.gnu.org/licenses/>. */
+#ifndef SYSSELECT_H
+#define SYSSELECT_H 1
+
#ifndef DOS_NT
#include <sys/select.h>
#endif
@@ -47,3 +50,39 @@ typedef int fd_set;
#ifdef MSDOS
#define pselect sys_select
#endif
+
+INLINE_HEADER_BEGIN
+
+/* Check for out-of-range errors if ENABLE_CHECKING is defined. */
+
+INLINE void
+fd_CLR (int fd, fd_set *set)
+{
+ eassume (0 <= fd && fd < FD_SETSIZE);
+ FD_CLR (fd, set);
+}
+
+INLINE bool
+fd_ISSET (int fd, fd_set *set)
+{
+ eassume (0 <= fd && fd < FD_SETSIZE);
+ return FD_ISSET (fd, set) != 0;
+}
+
+INLINE void
+fd_SET (int fd, fd_set *set)
+{
+ eassume (0 <= fd && fd < FD_SETSIZE);
+ FD_SET (fd, set);
+}
+
+#undef FD_CLR
+#undef FD_ISSET
+#undef FD_SET
+#define FD_CLR(fd, set) fd_CLR (fd, set)
+#define FD_ISSET(fd, set) fd_ISSET (fd, set)
+#define FD_SET(fd, set) fd_SET (fd, set)
+
+INLINE_HEADER_END
+
+#endif