diff options
author | brianp <brianp@13f79535-47bb-0310-9956-ffa450edef68> | 2002-08-11 20:53:43 +0000 |
---|---|---|
committer | brianp <brianp@13f79535-47bb-0310-9956-ffa450edef68> | 2002-08-11 20:53:43 +0000 |
commit | feff4e60c7f4590fb6aa889789974deebe41e221 (patch) | |
tree | 3f269ca2b2aaf872073525d470ecfc3b07f1fcb1 | |
parent | 402c90f97548053a0e00fb6aa4fa2887668e0a01 (diff) | |
download | libapr-feff4e60c7f4590fb6aa889789974deebe41e221.tar.gz |
Cleaned up the code for handling invalid descriptor types in apr_poll
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@63805 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | poll/unix/poll.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/poll/unix/poll.c b/poll/unix/poll.c index da79e4b95..82b049902 100644 --- a/poll/unix/poll.c +++ b/poll/unix/poll.c @@ -117,7 +117,7 @@ static apr_int16_t get_revent(apr_int16_t event) APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t num, apr_int32_t *nsds, apr_interval_time_t timeout) { - int i; + int i, num_to_poll; #ifdef HAVE_VLA /* XXX: I trust that this is a segv when insufficient stack exists? */ struct pollfd pollset[num]; @@ -151,18 +151,18 @@ APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t num, else if (aprset[i].desc_type == APR_POLL_FILE) { pollset[i].fd = aprset[i].desc.f->filedes; } - else if (aprset[i].desc_type == APR_NO_DESC) { - num = i + 1; + else { break; } pollset[i].events = get_event(aprset[i].reqevents); } + num_to_poll = i; if (timeout > 0) { timeout /= 1000; /* convert microseconds to milliseconds */ } - i = poll(pollset, num, timeout); + i = poll(pollset, num_to_poll, timeout); (*nsds) = i; for (i = 0; i < num; i++) { @@ -241,8 +241,7 @@ APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, int num, apr_int32_t *n #endif /* APR_FILES_AS_SOCKETS */ } - else if (aprset[i].desc_type == APR_NO_DESC) { - num = i + 1; + else { break; } if (aprset[i].reqevents & APR_POLLIN) { @@ -287,13 +286,16 @@ APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, int num, apr_int32_t *n if (aprset[i].desc_type == APR_POLL_SOCKET) { fd = aprset[i].desc.s->socketdes; } - else { + else if (aprset[i].desc_type == APR_POLL_FILE) { #if !APR_FILES_AS_SOCKETS return APR_EBADF; #else fd = aprset[i].desc.f->filedes; #endif } + else { + break; + } aprset[i].rtnevents = 0; if (FD_ISSET(fd, &readset)) { aprset[i].rtnevents |= APR_POLLIN; |