summaryrefslogtreecommitdiff
path: root/libevdev
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2020-02-12 22:09:36 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2020-02-16 22:02:44 +0000
commit55019733205f06588febe3c85fee1578dbccdb96 (patch)
treee8fcdfe043ad66abecb22c8d7f6beb1ee38b57fe /libevdev
parent757f2d4900dd268b0b82b5418f0b9483d8c00cc6 (diff)
downloadlibevdev-55019733205f06588febe3c85fee1578dbccdb96.tar.gz
Push the slot_update bits on the stack
Much simpler code this way Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev')
-rw-r--r--libevdev/libevdev-int.h2
-rw-r--r--libevdev/libevdev.c16
2 files changed, 4 insertions, 14 deletions
diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h
index ec8e48b..943f6ca 100644
--- a/libevdev/libevdev-int.h
+++ b/libevdev/libevdev-int.h
@@ -108,8 +108,6 @@ struct libevdev {
struct timeval last_event_time;
struct {
- unsigned long *slot_update;
- size_t slot_update_sz; /* in bytes */
unsigned long *tracking_id_changes;
size_t tracking_id_changes_sz; /* in bytes */
} mt_sync;
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
index a91878d..25a439f 100644
--- a/libevdev/libevdev.c
+++ b/libevdev/libevdev.c
@@ -201,7 +201,6 @@ libevdev_reset(struct libevdev *dev)
free(dev->uniq);
free(dev->mt_slot_vals);
free(dev->mt_sync.tracking_id_changes);
- free(dev->mt_sync.slot_update);
memset(dev, 0, sizeof(*dev));
dev->fd = -1;
dev->initialized = false;
@@ -332,10 +331,8 @@ free_slots(struct libevdev *dev)
dev->num_slots = -1;
free(dev->mt_slot_vals);
free(dev->mt_sync.tracking_id_changes);
- free(dev->mt_sync.slot_update);
dev->mt_slot_vals = NULL;
dev->mt_sync.tracking_id_changes = NULL;
- dev->mt_sync.slot_update = NULL;
}
static int
@@ -346,10 +343,8 @@ init_slots(struct libevdev *dev)
free(dev->mt_slot_vals);
free(dev->mt_sync.tracking_id_changes);
- free(dev->mt_sync.slot_update);
dev->mt_slot_vals = NULL;
dev->mt_sync.tracking_id_changes = NULL;
- dev->mt_sync.slot_update = NULL;
/* devices with ABS_RESERVED aren't MT devices,
see the documentation for multitouch-related
@@ -376,11 +371,7 @@ init_slots(struct libevdev *dev)
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);
- dev->mt_sync.slot_update_sz = NLONGS(dev->num_slots * ABS_MT_CNT) * sizeof(long);
- dev->mt_sync.slot_update = malloc(dev->mt_sync.slot_update_sz);
-
- if (!dev->mt_sync.tracking_id_changes ||
- !dev->mt_sync.slot_update) {
+ if (!dev->mt_sync.tracking_id_changes) {
rc = -ENOMEM;
goto out;
}
@@ -682,11 +673,12 @@ sync_mt_state(struct libevdev *dev, int create_events)
int rc;
int axis, slot;
int last_reported_slot = 0;
- unsigned long *slot_update = dev->mt_sync.slot_update;
+ unsigned long slot_update[NLONGS(dev->num_slots * ABS_MT_CNT)];
unsigned long *tracking_id_changes = dev->mt_sync.tracking_id_changes;
int need_tracking_id_changes = 0;
- memset(dev->mt_sync.slot_update, 0, dev->mt_sync.slot_update_sz);
+ memset(slot_update, 0, sizeof(slot_update));
+
memset(dev->mt_sync.tracking_id_changes, 0,
dev->mt_sync.tracking_id_changes_sz);