keymap: Move reading of event in separate function

This commit is contained in:
Martin Pitt 2011-01-16 19:25:04 +01:00
parent 9b444cb29a
commit 45019c0e88

View file

@ -256,6 +256,24 @@ static const char* default_keymap_path(const char* path)
return path; return path;
} }
/* read one event; return 1 if valid */
static int read_event(int fd, struct input_event* ev)
{
int ret;
ret = read(fd, ev, sizeof(struct input_event));
if (ret < 0) {
perror("read");
return 0;
}
if (ret != sizeof(struct input_event)) {
fprintf(stderr, "did not get enough data for event struct, aborting\n");
return 0;
}
return 1;
}
static void print_key(struct input_event *event) static void print_key(struct input_event *event)
{ {
static int cur_scancode = 0; static int cur_scancode = 0;
@ -280,29 +298,18 @@ static void print_key(struct input_event *event)
static void interactive(int fd) static void interactive(int fd)
{ {
struct input_event ev; struct input_event ev;
int run = 1;
/* grab input device */ /* grab input device */
ioctl(fd, EVIOCGRAB, 1); ioctl(fd, EVIOCGRAB, 1);
puts("Press ESC to finish"); puts("Press ESC to finish");
while (run) { while (read_event(fd, &ev)) {
switch (read(fd, &ev, sizeof(ev))) {
case -1:
perror("read");
run = 0;
break;
case 0:
run = 0;
break;
default:
print_key(&ev); print_key(&ev);
/* stop on Escape key release */ /* stop on Escape key release */
if (ev.type == EV_KEY && ev.code == KEY_ESC && ev.value == 0) if (ev.type == EV_KEY && ev.code == KEY_ESC && ev.value == 0)
run = 0;
break; break;
} }
}
/* release input device */ /* release input device */
ioctl(fd, EVIOCGRAB, 0); ioctl(fd, EVIOCGRAB, 0);