Improve syscall error handling (pacify -D_FORTIFY_SOURCE=2)

master
Raheman Vaiya 3 years ago
parent 115cdece6f
commit 02ac7d7c87
  1. 8
      src/daemon.c
  2. 7
      src/device.c
  3. 30
      src/ipc.c
  4. 6
      src/keyd.c
  5. 1
      src/keyd.h
  6. 32
      src/util.c
  7. 26
      src/vkbd/uinput.c
  8. 4
      t/chord3.t

@ -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);

@ -4,10 +4,7 @@
* © 2019 Raheman Vaiya (see also: LICENSE).
*/
#include "error.h"
#include "device.h"
#include "keys.h"
#include "keyd.h"
#include <stdio.h>
#include <pthread.h>
@ -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);
}

@ -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");

@ -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);
}
}

@ -26,6 +26,7 @@
#include <sys/un.h>
#include <termios.h>
#include <getopt.h>
#include <errno.h>
#include <time.h>
#include <unistd.h>

@ -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;
}
}

@ -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)

@ -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

Loading…
Cancel
Save