*/
struct pollfd *fds;
struct tevent_fd **fd_events;
- int num_fds;
+ uint64_t num_fds;
/* information for exiting from the event loop */
int exit_code;
struct tevent_context *ev = fde->event_ctx;
struct poll_event_context *poll_ev = NULL;
struct tevent_fd *moved_fde;
- long del_idx;
+ uint64_t del_idx = fde->additional_flags;
if (ev == NULL) {
goto done;
poll_ev = talloc_get_type_abort(
ev->additional_data, struct poll_event_context);
- /*
- * Assume a void * can carry enough bits to hold num_fds.
- */
- del_idx = (long)(fde->additional_data);
-
moved_fde = poll_ev->fd_events[poll_ev->num_fds-1];
poll_ev->fd_events[del_idx] = moved_fde;
poll_ev->fds[del_idx] = poll_ev->fds[poll_ev->num_fds-1];
- moved_fde->additional_data = (void *)del_idx;
+ moved_fde->additional_flags = del_idx;
poll_ev->num_fds -= 1;
done:
pfd->events |= (POLLOUT);
}
- /*
- * Assume a void * can carry enough bits to hold num_fds.
- */
- fde->additional_data = (void *)(long)poll_ev->num_fds;
+ fde->additional_flags = poll_ev->num_fds;
poll_ev->fd_events[poll_ev->num_fds] = fde;
poll_ev->num_fds += 1;
{
struct poll_event_context *poll_ev = talloc_get_type_abort(
fde->event_ctx->additional_data, struct poll_event_context);
- long idx;
+ uint64_t idx = fde->additional_flags;
uint16_t pollflags = 0;
if (flags & TEVENT_FD_READ) {
pollflags |= (POLLOUT);
}
- idx = (long)(fde->additional_data);
poll_ev->fds[idx].events = pollflags;
fde->flags = flags;
the handler to remove itself when called */
for (fde = ev->fd_events; fde; fde = fde->next) {
struct pollfd *pfd;
- long pfd_idx;
+ uint64_t pfd_idx = fde->additional_flags;
uint16_t flags = 0;
- pfd_idx = (long)(fde->additional_data);
-
pfd = &poll_ev->fds[pfd_idx];
if (pfd->revents & (POLLIN|POLLHUP|POLLERR)) {