diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-06-03 14:20:34 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-06-03 15:25:15 +1000 |
| commit | 46b829a4f22e0b8af1fc24d6ff0a418a42db212d (patch) | |
| tree | 91b6dfbbf7059a3ca235aa100008814d34929d91 /libevdev/libevdev.c | |
| parent | 4318b73549506f88100c4c5a83edd718f0dea6d9 (diff) | |
| download | libevdev-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.c | 11 |
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) { |
