X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fcompat-poll.c;h=11149f4d46f04b9b55cee2f87c41dd530138ab56;hb=db14a5c98fe64b74230422ec4c6affb27ab830fc;hp=7d4d0e1334ef1dc2abba28f9e694d2ce8052d1ea;hpb=c607fe035ea8821a8f4c6ab6f3467ec726e36a63;p=lttng-tools.git diff --git a/src/common/compat/compat-poll.c b/src/common/compat/compat-poll.c index 7d4d0e133..11149f4d4 100644 --- a/src/common/compat/compat-poll.c +++ b/src/common/compat/compat-poll.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -101,6 +102,7 @@ error: /* * Create pollfd data structure. */ +LTTNG_HIDDEN int compat_poll_create(struct lttng_poll_event *events, int size) { struct compat_poll_event_array *current, *wait; @@ -196,9 +198,47 @@ error: return -1; } +/* + * Modify an fd's events.. + */ +LTTNG_HIDDEN +int compat_poll_mod(struct lttng_poll_event *events, int fd, + uint32_t req_events) +{ + int i; + bool fd_found = false; + struct compat_poll_event_array *current; + + if (events == NULL || events->current.events == NULL || fd < 0) { + ERR("Bad compat poll mod arguments"); + goto error; + } + + current = &events->current; + + for (i = 0; i < current->nb_fd; i++) { + if (current->events[i].fd == fd) { + fd_found = true; + current->events[i].events = req_events; + events->need_update = 1; + break; + } + } + + if (!fd_found) { + goto error; + } + + return 0; + +error: + return -1; +} + /* * Remove a fd from the pollfd structure. */ +LTTNG_HIDDEN int compat_poll_del(struct lttng_poll_event *events, int fd) { int new_size, i, count = 0, ret; @@ -244,6 +284,7 @@ error: /* * Wait on poll() with timeout. Blocking call. */ +LTTNG_HIDDEN int compat_poll_wait(struct lttng_poll_event *events, int timeout) { int ret; @@ -291,6 +332,7 @@ error: /* * Setup poll set maximum size. */ +LTTNG_HIDDEN int compat_poll_set_max_size(void) { int ret, retval = 0;