diff options
author | Dima Zavin <dima@android.com> | 2011-09-02 11:51:31 -0700 |
---|---|---|
committer | Dima Zavin <dima@android.com> | 2011-09-02 14:55:20 -0700 |
commit | 365836736cfbf6b69f76b6d698b2a0beef935478 (patch) | |
tree | 05af8d11678dc6652e47a3f36ae500327e1c28c5 /minui/events.c | |
parent | bc29063bf4e2312133d91e211dfe9c86ee811489 (diff) | |
download | bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.gz bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.bz2 bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.zip |
minui: events: add ability to poll on non-input fds
Change-Id: Iad52a6f2adcae0068d252d6163586f9d7b93121d
Signed-off-by: Dima Zavin <dima@android.com>
Diffstat (limited to 'minui/events.c')
-rw-r--r-- | minui/events.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/minui/events.c b/minui/events.c index eca3bc7..8458b2d 100644 --- a/minui/events.c +++ b/minui/events.c @@ -25,17 +25,19 @@ #include "minui.h" #define MAX_DEVICES 16 +#define MAX_MISC_FDS 16 struct fd_info { ev_callback cb; void *data; }; -static struct pollfd ev_fds[MAX_DEVICES]; -static struct fd_info ev_fdinfo[MAX_DEVICES]; +static struct pollfd ev_fds[MAX_DEVICES + MAX_MISC_FDS]; +static struct fd_info ev_fdinfo[MAX_DEVICES + MAX_MISC_FDS]; static unsigned ev_count = 0; static unsigned ev_dev_count = 0; +static unsigned ev_misc_count = 0; int ev_init(ev_callback input_cb, void *data) { @@ -56,18 +58,35 @@ int ev_init(ev_callback input_cb, void *data) ev_fdinfo[ev_count].cb = input_cb; ev_fdinfo[ev_count].data = data; ev_count++; - if(ev_count == MAX_DEVICES) break; + ev_dev_count++; + if(ev_dev_count == MAX_DEVICES) break; } } return 0; } +int ev_add_fd(int fd, ev_callback cb, void *data) +{ + if (ev_misc_count == MAX_MISC_FDS || cb == NULL) + return -1; + + ev_fds[ev_count].fd = fd; + ev_fds[ev_count].events = POLLIN; + ev_fdinfo[ev_count].cb = cb; + ev_fdinfo[ev_count].data = data; + ev_count++; + ev_misc_count++; + return 0; +} + void ev_exit(void) { while (ev_count > 0) { close(ev_fds[--ev_count].fd); } + ev_misc_count = 0; + ev_dev_count = 0; } int ev_wait(int timeout) |