summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-07-05 00:35:35 -0400
committerNick Mathewson <nickm@torproject.org>2011-07-05 00:35:35 -0400
commit71349d080b4aa0138ff6c0e5f9fb1135b9c7f135 (patch)
tree872e6403b2305a959b4bc2a835b834f8faa0b7dc
parent78fb99ceb265d5969e06f55b9b9f78d1593ebb7b (diff)
parent49d11362051bcbd3ffe2165ca98a21eeab3672bc (diff)
downloadlibevent-71349d080b4aa0138ff6c0e5f9fb1135b9c7f135.tar.gz
Merge remote-tracking branch 'origin/patches-2.0'
-rw-r--r--select.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/select.c b/select.c
index e418261d..349474d5 100644
--- a/select.c
+++ b/select.c
@@ -51,17 +51,22 @@
#include "log-internal.h"
#include "evmap-internal.h"
-#ifndef howmany
-#define howmany(x, y) (((x)+((y)-1))/(y))
-#endif
-
#ifndef _EVENT_HAVE_FD_MASK
/* This type is mandatory, but Android doesn't define it. */
-#undef NFDBITS
-#define NFDBITS (sizeof(long)*8)
typedef unsigned long fd_mask;
#endif
+#ifndef NFDBITS
+#define NFDBITS (sizeof(fd_mask)*8)
+#endif
+
+/* Divide positive x by y, rounding up. */
+#define DIV_ROUNDUP(x, y) (((x)+((y)-1))/(y))
+
+/* How many bytes to allocate for N fds? */
+#define SELECT_ALLOC_SIZE(n) \
+ (DIV_ROUNDUP(n, NFDBITS) * sizeof(fd_mask))
+
struct selectop {
int event_fds; /* Highest fd in fd set */
int event_fdsz;
@@ -101,7 +106,7 @@ select_init(struct event_base *base)
if (!(sop = mm_calloc(1, sizeof(struct selectop))))
return (NULL);
- if (select_resize(sop, howmany(32 + 1, NFDBITS)*sizeof(fd_mask))) {
+ if (select_resize(sop, SELECT_ALLOC_SIZE(32 + 1))) {
select_free_selectop(sop);
return (NULL);
}
@@ -254,8 +259,7 @@ select_add(struct event_base *base, int fd, short old, short events, void *p)
/* In theory we should worry about overflow here. In
* reality, though, the highest fd on a unixy system will
* not overflow here. XXXX */
- while (fdsz <
- (int) (howmany(fd + 1, NFDBITS) * sizeof(fd_mask)))
+ while (fdsz < (int) SELECT_ALLOC_SIZE(fd + 1))
fdsz *= 2;
if (fdsz != sop->event_fdsz) {