diff --git a/src/daemon.c b/src/daemon.c index 914dd99..a2d8748 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -398,7 +398,7 @@ static int event_handler(struct event *ev) static int last_time = 0; static int timeout = 0; static struct keyboard *timeout_kbd = NULL; - struct key_event kev; + struct key_event kev = {0}; timeout -= ev->timestamp - last_time; last_time = ev->timestamp; @@ -495,7 +495,11 @@ int run_daemon(int argc, char *argv[]) setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); - nice(-20); + + if (nice(-20) == -1) { + perror("nice"); + exit(-1); + } evloop_add_fd(ipcfd); diff --git a/src/device.c b/src/device.c index 60e082e..ecbf9ee 100644 --- a/src/device.c +++ b/src/device.c @@ -4,10 +4,7 @@ * © 2019 Raheman Vaiya (see also: LICENSE). */ -#include "error.h" -#include "device.h" -#include "keys.h" - +#include "keyd.h" #include #include @@ -469,5 +466,5 @@ void device_set_led(const struct device *dev, int led, int state) .value = state }; - write(dev->fd, &ev, sizeof ev); + xwrite(dev->fd, &ev, sizeof ev); } diff --git a/src/ipc.c b/src/ipc.c index 50f0717..9b8ec14 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -8,36 +8,6 @@ /* TODO (maybe): settle on an API and publish the protocol. */ -void xwrite(int fd, const void *buf, size_t sz) -{ - size_t nwr = 0; - ssize_t n; - - while(sz != nwr) { - n = write(fd, buf+nwr, sz-nwr); - if (n < 0) { - perror("write"); - exit(-1); - } - nwr += n; - } -} - -void xread(int fd, void *buf, size_t sz) -{ - size_t nrd = 0; - ssize_t n; - - while(sz != nrd) { - n = read(fd, buf+nrd, sz-nrd); - if (n < 0) { - perror("read"); - exit(-1); - } - nrd += n; - } -} - static void chgid() { struct group *g = getgrnam("keyd"); diff --git a/src/keyd.c b/src/keyd.c index 621ab63..46481fd 100644 --- a/src/keyd.c +++ b/src/keyd.c @@ -28,8 +28,8 @@ static int ipc_exec(int type, const char *data, size_t sz, uint32_t timeout) xread(con, &msg, sizeof msg); if (msg.sz) { - write(1, msg.data, msg.sz); - write(1, "\n", 1); + xwrite(1, msg.data, msg.sz); + xwrite(1, "\n", 1); } return msg.type == IPC_FAIL; @@ -182,7 +182,7 @@ static int layer_listen(int argc, char *argv[]) if (sz <= 0) return -1; - write(1, buf, sz); + xwrite(1, buf, sz); } } diff --git a/src/keyd.h b/src/keyd.h index 2386cc1..202c6f8 100644 --- a/src/keyd.h +++ b/src/keyd.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..8e35ec5 --- /dev/null +++ b/src/util.c @@ -0,0 +1,32 @@ +#include "keyd.h" + +void xwrite(int fd, const void *buf, size_t sz) +{ + size_t nwr = 0; + ssize_t n; + + while(sz != nwr) { + n = write(fd, buf+nwr, sz-nwr); + if (n < 0) { + perror("write"); + exit(-1); + } + nwr += n; + } +} + +void xread(int fd, void *buf, size_t sz) +{ + size_t nrd = 0; + ssize_t n; + + while(sz != nrd) { + n = read(fd, buf+nrd, sz-nrd); + if (n < 0) { + perror("read"); + exit(-1); + } + nrd += n; + } +} + diff --git a/src/vkbd/uinput.c b/src/vkbd/uinput.c index da549bc..b138941 100644 --- a/src/vkbd/uinput.c +++ b/src/vkbd/uinput.c @@ -23,9 +23,7 @@ #define REPEAT_INTERVAL 40 #define REPEAT_TIMEOUT 200 -#include "../vkbd.h" -#include "../keys.h" -#include "../error.h" +#include "../keyd.h" struct vkbd { int fd; @@ -200,14 +198,14 @@ void write_key_event(const struct vkbd *vkbd, uint8_t code, int state) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(fd, &ev, sizeof(ev)); + xwrite(fd, &ev, sizeof(ev)); ev.type = EV_SYN; ev.code = 0; ev.value = 0; - write(fd, &ev, sizeof(ev)); + xwrite(fd, &ev, sizeof(ev)); pthread_mutex_unlock(&mtx); } @@ -259,7 +257,7 @@ void vkbd_mouse_move(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } if (y) { @@ -270,14 +268,14 @@ void vkbd_mouse_move(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } ev.type = EV_SYN; ev.code = 0; ev.value = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } void vkbd_mouse_scroll(const struct vkbd *vkbd, int x, int y) @@ -291,7 +289,7 @@ void vkbd_mouse_scroll(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); ev.type = EV_REL; ev.code = REL_HWHEEL; @@ -300,13 +298,13 @@ void vkbd_mouse_scroll(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); ev.type = EV_SYN; ev.code = 0; ev.value = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y) @@ -321,7 +319,7 @@ void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } if (y) { @@ -332,14 +330,14 @@ void vkbd_mouse_move_abs(const struct vkbd *vkbd, int x, int y) ev.time.tv_sec = 0; ev.time.tv_usec = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } ev.type = EV_SYN; ev.code = 0; ev.value = 0; - write(vkbd->pfd, &ev, sizeof(ev)); + xwrite(vkbd->pfd, &ev, sizeof(ev)); } void vkbd_send_key(const struct vkbd *vkbd, uint8_t code, int state) diff --git a/t/chord3.t b/t/chord3.t index a96e4b1..6616937 100644 --- a/t/chord3.t +++ b/t/chord3.t @@ -1,10 +1,10 @@ a down b down -200 ms +200ms a up j down k down -200 ms +200ms b up j up k up