From 1bc6faa48907919376b14429f3b802d0d16fc00a Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Tue, 21 Dec 2010 17:29:14 +0100 Subject: 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 --- tools/evemu-device.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'tools/evemu-device.c') 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) ret = read(fd, name, sizeof(name)); if (ret > 0) name[ret - 1] = 0; - if (!strcmp(dev->name, name)) + if (!strcmp(evemu_get_name(dev), name)) sprintf(node, "/dev/input/event%d", i + 1); close(fd); } @@ -58,7 +58,7 @@ static void hold_device(const struct evemu_device *dev) fd = open(node, O_RDONLY); if (fd < 0) return; - fprintf(stdout, "%s: %s\n", dev->name, node); + fprintf(stdout, "%s: %s\n", evemu_get_name(dev), node); fflush(stdout); while ((ret = read(fd, data, sizeof(data))) > 0); close(fd); @@ -66,28 +66,36 @@ static void hold_device(const struct evemu_device *dev) static int evemu_device(FILE *fp) { - struct evemu_device dev; - int ret, fd; + struct evemu_device *dev; + char name[64]; + int ret = -ENOMEM; + int fd; - ret = evemu_read(&dev, fp); - if (ret <= 0) - return ret; + sprintf(name, "evemu-%d", getpid()); - sprintf(dev.name, "evemu-%d", getpid()); + dev = evemu_new(name); + if (!dev) + goto out; + ret = evemu_read(dev, fp); + if (ret <= 0) + goto out; - fd = open(UINPUT_NODE, O_WRONLY); - if (fd < 0) - return fd; - ret = evemu_create(&dev, fd); + ret = fd = open(UINPUT_NODE, O_WRONLY); if (ret < 0) - return ret; - - hold_device(&dev); + goto out; + ret = evemu_create(dev, fd); + if (ret < 0) + goto out_close; + hold_device(dev); evemu_destroy(fd); + +out_close: close(fd); +out: + evemu_delete(dev); - return 0; + return ret; } int main(int argc, char *argv[]) -- cgit v1.2.3