summaryrefslogtreecommitdiff
path: root/libevdev/libevdev.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-06-03 14:20:34 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-06-03 15:25:15 +1000
commit46b829a4f22e0b8af1fc24d6ff0a418a42db212d (patch)
tree91b6dfbbf7059a3ca235aa100008814d34929d91 /libevdev/libevdev.c
parent4318b73549506f88100c4c5a83edd718f0dea6d9 (diff)
downloadlibevdev-46b829a4f22e0b8af1fc24d6ff0a418a42db212d.tar.gz
Let the name be dynamically allocated
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev/libevdev.c')
-rw-r--r--libevdev/libevdev.c11
1 files changed, 10 insertions, 1 deletions
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) {