summaryrefslogtreecommitdiff
path: root/tools/evemu-device.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-12-21 17:29:14 +0100
committerHenrik Rydberg <rydberg@euromail.se>2010-12-21 17:29:14 +0100
commit1bc6faa48907919376b14429f3b802d0d16fc00a (patch)
tree73e57b6f956d8f50c456330c878e9b210ad41483 /tools/evemu-device.c
parenta8df0405686350c3145b3e5119d796c6642339fd (diff)
Make evemu ABI resilient
Hide the evemu struct, make it versioned, and instead use new/delete and accessor functions. This should give us enough ABI stability to run mixed library implementations. Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'tools/evemu-device.c')
-rw-r--r--tools/evemu-device.c40
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
67static int evemu_device(FILE *fp) 67static 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
93out_close:
88 close(fd); 94 close(fd);
95out:
96 evemu_delete(dev);
89 97
90 return 0; 98 return ret;
91} 99}
92 100
93int main(int argc, char *argv[]) 101int main(int argc, char *argv[])