Commit 5897da1d authored by Paul Eggert's avatar Paul Eggert Committed by Paul Eggert

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.
parent 221e0a20
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
......
......@@ -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);
}
......
......@@ -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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment