Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/patches-2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
nmathewson committed Jul 5, 2011
2 parents 78fb99c + 49d1136 commit 71349d0
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions select.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 71349d0

Please sign in to comment.