Let the name be dynamically allocated
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 3 Jun 2013 04:20:34 +0000 (14:20 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 3 Jun 2013 05:25:15 +0000 (15:25 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
libevdev/libevdev-int.h
libevdev/libevdev.c

index 219d555..a585f42 100644 (file)
@@ -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;
index 0d4600b..ba55965 100644 (file)
@@ -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) {