diff options
author | Paul Eggert <eggert@penguin.cs.ucla.edu> | 2014-06-03 09:15:43 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-06-03 09:15:43 -0700 |
commit | 5897da1d746561c63719b21c5984b49a194f8209 (patch) | |
tree | 17fd7644af53ef0fb0cee898c5516a8be3141236 /src/sysselect.h | |
parent | 221e0a20f60027c6e393166b7b3d18e01d704fa3 (diff) | |
download | emacs-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.h | 39 |
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 |