summaryrefslogtreecommitdiffstats
path: root/minui/events.c
diff options
context:
space:
mode:
authorDima Zavin <dima@android.com>2011-09-02 20:51:31 +0200
committerDima Zavin <dima@android.com>2011-09-02 23:55:20 +0200
commit365836736cfbf6b69f76b6d698b2a0beef935478 (patch)
tree05af8d11678dc6652e47a3f36ae500327e1c28c5 /minui/events.c
parentminui: events: refactor event acquisition (diff)
downloadandroid_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.gz
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.bz2
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.lz
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.xz
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.tar.zst
android_bootable_recovery-365836736cfbf6b69f76b6d698b2a0beef935478.zip
Diffstat (limited to 'minui/events.c')
-rw-r--r--minui/events.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/minui/events.c b/minui/events.c
index eca3bc73b..8458b2d39 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)