]> git.eshelyaron.com Git - emacs.git/commitdiff
If ENABLE_CHECKING, range-check args of FD_CLR, FD_ISSET, FD_SET.
authorPaul Eggert <eggert@penguin.cs.ucla.edu>
Tue, 3 Jun 2014 16:15:43 +0000 (09:15 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 Jun 2014 16:15:43 +0000 (09:15 -0700)
* 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.

src/ChangeLog
src/process.c
src/sysselect.h

index d099ca757bfc51e57a868f2f3196b89711dd20e1..39dde84f645ba07f785278e6a294eef5ee6c1695 100644 (file)
@@ -1,3 +1,14 @@
+2014-06-03  Paul Eggert  <eggert@penguin.cs.ucla.edu>
+
+       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.
+
 2014-06-03  Eli Zaretskii  <eliz@gnu.org>
 
        * w32heap.c (DUMPED_HEAP_SIZE): Move from w32heap.h.  Don't use
index e77dcb2b41e1d3426f5f74314fdbf499796a97e5..9321cdc48758fd905b809efcb222ccf3508da965 100644 (file)
@@ -468,7 +468,6 @@ static struct fd_callback_data
 void
 add_read_fd (int fd, fd_callback func, void *data)
 {
-  eassert (fd < FD_SETSIZE);
   add_keyboard_wait_descriptor (fd);
 
   fd_callback_info[fd].func = func;
@@ -481,7 +480,6 @@ add_read_fd (int fd, fd_callback func, void *data)
 void
 delete_read_fd (int fd)
 {
-  eassert (fd < FD_SETSIZE);
   delete_keyboard_wait_descriptor (fd);
 
   fd_callback_info[fd].condition &= ~FOR_READ;
@@ -498,7 +496,6 @@ delete_read_fd (int fd)
 void
 add_write_fd (int fd, fd_callback func, void *data)
 {
-  eassert (fd < FD_SETSIZE);
   FD_SET (fd, &write_mask);
   if (fd > max_input_desc)
     max_input_desc = fd;
@@ -529,7 +526,6 @@ delete_input_desc (int fd)
 void
 delete_write_fd (int fd)
 {
-  eassert (fd < FD_SETSIZE);
   FD_CLR (fd, &write_mask);
   fd_callback_info[fd].condition &= ~FOR_WRITE;
   if (fd_callback_info[fd].condition == 0)
@@ -4652,8 +4648,6 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
                          > 0))
                    {
                      nfds = 1;
-                     eassert (0 <= wait_proc->infd
-                              && wait_proc->infd < FD_SETSIZE);
                      /* Set to Available.  */
                      FD_SET (wait_proc->infd, &Available);
                    }
index b76e71a3a758bda67aba9fa8aaa595b8aac03651..9ecc96e310cda3f13076e07d9ca5100cf66d7fad 100644 (file)
@@ -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