Push the tracking id change bits on the stack
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 12 Feb 2020 12:10:59 +0000 (22:10 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Sun, 16 Feb 2020 22:02:44 +0000 (22:02 +0000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
libevdev/libevdev-int.h
libevdev/libevdev.c

index 943f6cab951bf74bba1fc134a8a884040a1bcbfb..7da5cf02c20b4df747e9f1358ffd2aec1d14834e 100644 (file)
@@ -107,11 +107,6 @@ struct libevdev {
 
        struct timeval last_event_time;
 
-       struct {
-               unsigned long *tracking_id_changes;
-               size_t tracking_id_changes_sz;   /* in bytes */
-       } mt_sync;
-
        struct logdata log;
 };
 
index 25a439f4394d42783069593b2061af27016982f7..5b1abc75367ec3282d13ebc63ee7c622f07c2b41 100644 (file)
@@ -200,7 +200,6 @@ libevdev_reset(struct libevdev *dev)
        free(dev->phys);
        free(dev->uniq);
        free(dev->mt_slot_vals);
-       free(dev->mt_sync.tracking_id_changes);
        memset(dev, 0, sizeof(*dev));
        dev->fd = -1;
        dev->initialized = false;
@@ -330,9 +329,7 @@ free_slots(struct libevdev *dev)
 {
        dev->num_slots = -1;
        free(dev->mt_slot_vals);
-       free(dev->mt_sync.tracking_id_changes);
        dev->mt_slot_vals = NULL;
-       dev->mt_sync.tracking_id_changes = NULL;
 }
 
 static int
@@ -342,9 +339,7 @@ init_slots(struct libevdev *dev)
        int rc = 0;
 
        free(dev->mt_slot_vals);
-       free(dev->mt_sync.tracking_id_changes);
        dev->mt_slot_vals = NULL;
-       dev->mt_sync.tracking_id_changes = NULL;
 
        /* devices with ABS_RESERVED aren't MT devices,
           see the documentation for multitouch-related
@@ -368,14 +363,6 @@ init_slots(struct libevdev *dev)
        }
        dev->current_slot = abs_info->value;
 
-       dev->mt_sync.tracking_id_changes_sz = NLONGS(dev->num_slots) * sizeof(long);
-       dev->mt_sync.tracking_id_changes = malloc(dev->mt_sync.tracking_id_changes_sz);
-
-       if (!dev->mt_sync.tracking_id_changes) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
        reset_tracking_ids(dev);
 out:
        return rc;
@@ -674,13 +661,12 @@ sync_mt_state(struct libevdev *dev, int create_events)
        int axis, slot;
        int last_reported_slot = 0;
        unsigned long slot_update[NLONGS(dev->num_slots * ABS_MT_CNT)];
-       unsigned long *tracking_id_changes = dev->mt_sync.tracking_id_changes;
+       unsigned long tracking_id_changes[NLONGS(dev->num_slots)];
+
        int need_tracking_id_changes = 0;
 
        memset(slot_update, 0, sizeof(slot_update));
-
-       memset(dev->mt_sync.tracking_id_changes, 0,
-              dev->mt_sync.tracking_id_changes_sz);
+       memset(tracking_id_changes, 0, sizeof(tracking_id_changes));
 
 #define AXISBIT(_slot, _axis) (_slot * ABS_MT_CNT + _axis - ABS_MT_MIN)