about summary refs log tree commit diff
path: root/include/sys
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-23 22:24:33 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-23 22:24:33 -0400
commitc41a76f58ce0238172effe982f2cee7bbd2a60a4 (patch)
treed5786c6de0e3dbc3929c81ae6221d8737918ceb4 /include/sys
parent1587224ed60aa38b7a26c5eaf692f1f1ab525afd (diff)
downloadmusl-c41a76f58ce0238172effe982f2cee7bbd2a60a4.tar.gz
musl-c41a76f58ce0238172effe982f2cee7bbd2a60a4.tar.xz
musl-c41a76f58ce0238172effe982f2cee7bbd2a60a4.zip
FD_ISSET must return an int. this is the easiest way.
casting to int would not be correct because high bits could be lost.
mapping the high bits down onto low bits would be costlier in the
common case where the result is just used in a conditional. changing
the type of the bit array elements to int would permute the order of
the bit array on 64-bit big endian systems, so that's not an option
either.
Diffstat (limited to 'include/sys')
-rw-r--r--include/sys/select.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/sys/select.h b/include/sys/select.h
index cbe35a4f..47d195f4 100644
--- a/include/sys/select.h
+++ b/include/sys/select.h
@@ -25,7 +25,7 @@ typedef struct
 #define FD_ZERO(s) do { int __i; unsigned long *__b=(s)->fds_bits; for(__i=sizeof (fd_set)/sizeof (long); __i; __i--) *__b++=0; } while(0)
 #define FD_SET(d, s)   ((s)->fds_bits[(d)/(8*sizeof(long))] |= (1UL<<((d)%(8*sizeof(long)))))
 #define FD_CLR(d, s)   ((s)->fds_bits[(d)/(8*sizeof(long))] &= ~(1UL<<((d)%(8*sizeof(long)))))
-#define FD_ISSET(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] & (1UL<<((d)%(8*sizeof(long)))))
+#define FD_ISSET(d, s) !!((s)->fds_bits[(d)/(8*sizeof(long))] & (1UL<<((d)%(8*sizeof(long)))))
 
 int select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
 int pselect (int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);