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 --- src/evemu-impl.h | 19 +++++++++++++++++++ src/evemu.c | 31 ++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/evemu-impl.h (limited to 'src') diff --git a/src/evemu-impl.h b/src/evemu-impl.h new file mode 100644 index 0000000..2346590 --- /dev/null +++ b/src/evemu-impl.h @@ -0,0 +1,19 @@ +#ifndef _EVEMU_IMPL_H +#define _EVEMU_IMPL_H + +#include +#include + +#define EVPLAY_NBITS KEY_CNT +#define EVPLAY_NBYTES ((EVPLAY_NBITS + 7) / 8) + +struct evemu_device { + int version_major, version_minor; + char name[UINPUT_MAX_NAME_SIZE]; + struct input_id id; + unsigned char mask[EV_CNT][EVPLAY_NBYTES]; + int bytes[EV_CNT]; + struct input_absinfo abs[ABS_CNT]; +}; + +#endif diff --git a/src/evemu.c b/src/evemu.c index 54156aa..53bda86 100644 --- a/src/evemu.c +++ b/src/evemu.c @@ -26,7 +26,8 @@ * ****************************************************************************/ -#include "evemu.h" +#include "evemu-impl.h" +#include #include #include #include @@ -44,6 +45,34 @@ static void copy_bits(unsigned char *mask, const unsigned long *bits, int bytes) } } +struct evemu_device *evemu_new(const char *name) +{ + struct evemu_device *dev = calloc(1, sizeof(struct evemu_device)); + + dev->version_major = EVEMU_VERSION_MAJOR; + dev->version_minor = EVEMU_VERSION_MINOR; + + if (name && strlen(name) < sizeof(dev->name)) + strcpy(dev->name, name); + + return dev; +} + +void evemu_delete(struct evemu_device *dev) +{ + free(dev); +} + +const char *evemu_get_name(const struct evemu_device *dev) +{ + return dev->name; +} + +int evemu_has(const struct evemu_device *dev, int type, int code) +{ + return (dev->mask[type][code >> 3] >> (code & 7)) & 1; +} + int evemu_extract(struct evemu_device *dev, int fd) { unsigned long bits[64]; -- cgit v1.2.3