diff options
Diffstat (limited to 'tools/evemu-device.c')
| -rw-r--r-- | tools/evemu-device.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/tools/evemu-device.c b/tools/evemu-device.c index b318cf6..79193ff 100644 --- a/tools/evemu-device.c +++ b/tools/evemu-device.c | |||
| @@ -50,7 +50,7 @@ static void hold_device(const struct evemu_device *dev) | |||
| 50 | ret = read(fd, name, sizeof(name)); | 50 | ret = read(fd, name, sizeof(name)); |
| 51 | if (ret > 0) | 51 | if (ret > 0) |
| 52 | name[ret - 1] = 0; | 52 | name[ret - 1] = 0; |
| 53 | if (!strcmp(dev->name, name)) | 53 | if (!strcmp(evemu_get_name(dev), name)) |
| 54 | sprintf(node, "/dev/input/event%d", i + 1); | 54 | sprintf(node, "/dev/input/event%d", i + 1); |
| 55 | close(fd); | 55 | close(fd); |
| 56 | } | 56 | } |
| @@ -58,7 +58,7 @@ static void hold_device(const struct evemu_device *dev) | |||
| 58 | fd = open(node, O_RDONLY); | 58 | fd = open(node, O_RDONLY); |
| 59 | if (fd < 0) | 59 | if (fd < 0) |
| 60 | return; | 60 | return; |
| 61 | fprintf(stdout, "%s: %s\n", dev->name, node); | 61 | fprintf(stdout, "%s: %s\n", evemu_get_name(dev), node); |
| 62 | fflush(stdout); | 62 | fflush(stdout); |
| 63 | while ((ret = read(fd, data, sizeof(data))) > 0); | 63 | while ((ret = read(fd, data, sizeof(data))) > 0); |
| 64 | close(fd); | 64 | close(fd); |
| @@ -66,28 +66,36 @@ static void hold_device(const struct evemu_device *dev) | |||
| 66 | 66 | ||
| 67 | static int evemu_device(FILE *fp) | 67 | static int evemu_device(FILE *fp) |
| 68 | { | 68 | { |
| 69 | struct evemu_device dev; | 69 | struct evemu_device *dev; |
| 70 | int ret, fd; | 70 | char name[64]; |
| 71 | int ret = -ENOMEM; | ||
| 72 | int fd; | ||
| 71 | 73 | ||
| 72 | ret = evemu_read(&dev, fp); | 74 | sprintf(name, "evemu-%d", getpid()); |
| 73 | if (ret <= 0) | ||
| 74 | return ret; | ||
| 75 | 75 | ||
| 76 | sprintf(dev.name, "evemu-%d", getpid()); | 76 | dev = evemu_new(name); |
| 77 | if (!dev) | ||
| 78 | goto out; | ||
| 79 | ret = evemu_read(dev, fp); | ||
| 80 | if (ret <= 0) | ||
| 81 | goto out; | ||
| 77 | 82 | ||
| 78 | fd = open(UINPUT_NODE, O_WRONLY); | 83 | ret = fd = open(UINPUT_NODE, O_WRONLY); |
| 79 | if (fd < 0) | ||
| 80 | return fd; | ||
| 81 | ret = evemu_create(&dev, fd); | ||
| 82 | if (ret < 0) | 84 | if (ret < 0) |
| 83 | return ret; | 85 | goto out; |
| 84 | |||
| 85 | hold_device(&dev); | ||
| 86 | 86 | ||
| 87 | ret = evemu_create(dev, fd); | ||
| 88 | if (ret < 0) | ||
| 89 | goto out_close; | ||
| 90 | hold_device(dev); | ||
| 87 | evemu_destroy(fd); | 91 | evemu_destroy(fd); |
| 92 | |||
| 93 | out_close: | ||
| 88 | close(fd); | 94 | close(fd); |
| 95 | out: | ||
| 96 | evemu_delete(dev); | ||
| 89 | 97 | ||
| 90 | return 0; | 98 | return ret; |
| 91 | } | 99 | } |
| 92 | 100 | ||
| 93 | int main(int argc, char *argv[]) | 101 | int main(int argc, char *argv[]) |
