From 46b829a4f22e0b8af1fc24d6ff0a418a42db212d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 3 Jun 2013 14:20:34 +1000 Subject: [PATCH] Let the name be dynamically allocated Signed-off-by: Peter Hutterer --- libevdev/libevdev-int.h | 2 +- libevdev/libevdev.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h index 219d555..a585f42 100644 --- a/libevdev/libevdev-int.h +++ b/libevdev/libevdev-int.h @@ -52,7 +52,7 @@ struct libevdev { int fd; libevdev_log_func_t log; - char name[MAX_NAME]; + char *name; char *phys; char *uniq; struct input_id ids; diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 0d4600b..ba55965 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -180,6 +180,7 @@ libevdev_new_from_fd(int fd, struct libevdev **dev) void libevdev_free(struct libevdev *dev) { + free(dev->name); free(dev->phys); free(dev->uniq); queue_free(dev); @@ -215,10 +216,18 @@ libevdev_set_fd(struct libevdev* dev, int fd) if (rc < 0) goto out; - rc = ioctl(fd, EVIOCGNAME(sizeof(dev->name) - 1), dev->name); + memset(buf, 0, sizeof(buf)); + rc = ioctl(fd, EVIOCGNAME(sizeof(buf) - 1), buf); if (rc < 0) goto out; + dev->name = calloc(strlen(buf) + 1, sizeof(char)); + if (!dev->name) { + errno = ENOSPC; + goto out; + } + strcpy(dev->name, buf); + memset(buf, 0, sizeof(buf)); rc = ioctl(fd, EVIOCGPHYS(sizeof(buf) - 1), buf); if (rc < 0) {