summaryrefslogtreecommitdiff
path: root/src/iobuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/iobuf.c')
-rw-r--r--src/iobuf.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/iobuf.c b/src/iobuf.c
index 050f2ed..85a9f19 100644
--- a/src/iobuf.c
+++ b/src/iobuf.c
@@ -37,7 +37,7 @@ int mtdev_idle(struct mtdev *dev, int fd, int ms)
37 return buf->head == buf->tail && poll(&fds, 1, ms) <= 0; 37 return buf->head == buf->tail && poll(&fds, 1, ms) <= 0;
38} 38}
39 39
40int mtdev_fetch(struct mtdev *dev, int fd, struct input_event *ev) 40int mtdev_fetch_event(struct mtdev *dev, int fd, struct input_event *ev)
41{ 41{
42 struct mtdev_iobuf *buf = &dev->state->iobuf; 42 struct mtdev_iobuf *buf = &dev->state->iobuf;
43 int n = buf->head - buf->tail; 43 int n = buf->head - buf->tail;
@@ -59,21 +59,30 @@ int mtdev_fetch(struct mtdev *dev, int fd, struct input_event *ev)
59 return 1; 59 return 1;
60} 60}
61 61
62int mtdev_pull(struct mtdev *dev, int fd, int max_events) 62int mtdev_empty(struct mtdev *dev)
63{ 63{
64 struct mtdev_state *state = dev->state; 64 return evbuf_empty(&dev->state->outbuf);
65 struct input_event ev; 65}
66
67void mtdev_get_event(struct mtdev *dev, struct input_event* ev)
68{
69 evbuf_get(&dev->state->outbuf, ev);
70}
71
72int mtdev_get(struct mtdev *dev, int fd, struct input_event* ev, int ev_max)
73{
74 struct input_event kev;
66 int ret, count = 0; 75 int ret, count = 0;
67 if (max_events <= 0) 76 while (count < ev_max) {
68 max_events = DIM_EVENTS; 77 while (mtdev_empty(dev)) {
69 while (max_events-- && !evbuf_full(&state->inbuf)) { 78 ret = mtdev_fetch_event(dev, fd, &kev);
70 ret = mtdev_fetch(dev, fd, &ev); 79 if (ret < 0)
71 if (ret < 0) 80 return ret;
72 return ret; 81 if (ret == 0)
73 if (ret == 0) 82 return count;
74 break; 83 mtdev_put_event(dev, &kev);
75 mtdev_put(dev, &ev); 84 }
76 count++; 85 mtdev_get_event(dev, &ev[count++]);
77 } 86 }
78 return count; 87 return count;
79} 88}