summaryrefslogtreecommitdiff
path: root/pkg/libevdev/patch
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2020-03-03 01:15:16 -0800
committerMichael Forney <mforney@mforney.org>2020-03-03 16:21:51 -0800
commitf505a4168e95b879438dfc8e3b84f07c531eb8ad (patch)
tree4604f822165103e513ea757ac82d7c7b27324e2a /pkg/libevdev/patch
parent379d4a92f3ba42b200bac190877ed1804ef1d782 (diff)
libevdev: Update to 1.9.0
Port eventnames script to lua.
Diffstat (limited to 'pkg/libevdev/patch')
-rw-r--r--pkg/libevdev/patch/0001-Avoid-statement-expressions.patch78
-rw-r--r--pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch277
-rw-r--r--pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch39
-rw-r--r--pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch35
4 files changed, 277 insertions, 152 deletions
diff --git a/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch b/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch
deleted file mode 100644
index 24a79b1d..00000000
--- a/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 2502b02e69ad84e1e8e96fa1683968e72bbd0501 Mon Sep 17 00:00:00 2001
-From: Michael Forney <mforney@mforney.org>
-Date: Sun, 16 Jun 2019 17:05:30 -0700
-Subject: [PATCH] Avoid statement expressions
-Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11
-
----
- libevdev/libevdev-int.h | 3 ++-
- libevdev/libevdev-util.h | 13 -------------
- libevdev/libevdev.c | 7 ++++++-
- 3 files changed, 8 insertions(+), 15 deletions(-)
-
-diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h
-index e1c7ec5..b92d8d5 100644
---- a/libevdev/libevdev-int.h
-+++ b/libevdev/libevdev-int.h
-@@ -198,7 +198,8 @@ queue_shift_multiple(struct libevdev *dev, size_t n, struct input_event *ev)
- return 0;
-
- remaining = dev->queue_next;
-- n = min(n, remaining);
-+ if (remaining < n)
-+ n = remaining;
- remaining -= n;
-
- if (ev)
-diff --git a/libevdev/libevdev-util.h b/libevdev/libevdev-util.h
-index c6e1197..e8b6769 100644
---- a/libevdev/libevdev-util.h
-+++ b/libevdev/libevdev-util.h
-@@ -32,19 +32,6 @@
- #define ARRAY_LENGTH(a) (sizeof(a) / (sizeof((a)[0])))
- #define unlikely(x) (__builtin_expect(!!(x),0))
-
--#undef min
--#undef max
--#define min(a,b) \
-- ({ __typeof__ (a) _a = (a); \
-- __typeof__ (b) _b = (b); \
-- _a > _b ? _b : _a; \
-- })
--#define max(a,b) \
-- ({ __typeof__ (a) _a = (a); \
-- __typeof__ (b) _b = (b); \
-- _a > _b ? _a : _b; \
-- })
--
- static inline bool
- startswith(const char *str, size_t len, const char *prefix, size_t plen)
- {
-diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
-index c5798b4..e5abe91 100644
---- a/libevdev/libevdev.c
-+++ b/libevdev/libevdev.c
-@@ -67,6 +67,7 @@ init_event_queue(struct libevdev *dev)
- int nevents = 1; /* terminating SYN_REPORT */
- int nslots;
- unsigned int type, code;
-+ size_t size;
-
- /* count the number of axes, keys, etc. to get a better idea at how
- many events per EV_SYN we could possibly get. That's the max we
-@@ -94,7 +95,11 @@ init_event_queue(struct libevdev *dev)
- nevents += num_mt_axes * (nslots - 1);
- }
-
-- return queue_alloc(dev, max(MIN_QUEUE_SIZE, nevents * 2));
-+ size = nevents * 2;
-+ if (size < MIN_QUEUE_SIZE)
-+ size = MIN_QUEUE_SIZE;
-+
-+ return queue_alloc(dev, size);
- }
-
- static void
---
-2.20.1
-
diff --git a/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch b/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch
new file mode 100644
index 00000000..8bce094b
--- /dev/null
+++ b/pkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch
@@ -0,0 +1,277 @@
+From b3fba1efb0475b6e64e4109738bde1e83d87147a Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 3 Mar 2020 14:17:37 -0800
+Subject: [PATCH libevdev] Revert switch to VLAs for multitouch state
+
+Signed-off-by: Michael Forney <mforney@mforney.org>
+---
+ libevdev/libevdev-int.h | 28 ++++++++++++++
+ libevdev/libevdev.c | 84 ++++++++++++++++++++---------------------
+ 2 files changed, 68 insertions(+), 44 deletions(-)
+
+diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h
+index 7da5cf0..2743e50 100644
+--- a/libevdev/libevdev-int.h
++++ b/libevdev/libevdev-int.h
+@@ -24,6 +24,7 @@
+ #define LIBEVDEV_INT_H
+
+ #include "config.h"
++#include <stdint.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stdbool.h>
+@@ -55,6 +56,26 @@ enum SyncState {
+ SYNC_IN_PROGRESS,
+ };
+
++struct mt_sync_state {
++ uint32_t code;
++ int32_t val[];
++};
++
++/* Keeps a record of touches during SYN_DROPPED */
++enum touch_state {
++ TOUCH_OFF,
++ TOUCH_STARTED, /* Started during SYN_DROPPED */
++ TOUCH_STOPPED, /* Stopped during SYN_DROPPED */
++ TOUCH_ONGOING, /* Existed before, still have same tracking ID */
++ TOUCH_CHANGED, /* Existed before but have new tracking ID now, so
++ stopped + started in that slot */
++};
++
++struct slot_change_state {
++ enum touch_state state;
++ unsigned long axes[NLONGS(ABS_CNT)]; /* bitmask for updated axes */
++};
++
+ /**
+ * Internal only: log data used to send messages to the respective log
+ * handler. We re-use the same struct for a global and inside
+@@ -107,6 +128,13 @@ struct libevdev {
+
+ struct timeval last_event_time;
+
++ struct {
++ struct mt_sync_state *mt_state;
++ size_t mt_state_sz; /* in bytes */
++ struct slot_change_state *changes;
++ size_t changes_sz; /* in bytes */
++ } mt_sync;
++
+ struct logdata log;
+ };
+
+diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
+index f034637..77cf678 100644
+--- a/libevdev/libevdev.c
++++ b/libevdev/libevdev.c
+@@ -28,7 +28,6 @@
+ #include <limits.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+-#include <stdint.h>
+ #include <stdbool.h>
+
+ #include "libevdev.h"
+@@ -44,23 +43,7 @@ enum event_filter_status {
+ EVENT_FILTER_DISCARD, /**< Discard current event */
+ };
+
+-/* Keeps a record of touches during SYN_DROPPED */
+-enum touch_state {
+- TOUCH_OFF,
+- TOUCH_STARTED, /* Started during SYN_DROPPED */
+- TOUCH_STOPPED, /* Stopped during SYN_DROPPED */
+- TOUCH_ONGOING, /* Existed before, still have same tracking ID */
+- TOUCH_CHANGED, /* Existed before but have new tracking ID now, so
+- stopped + started in that slot */
+-};
+-
+-struct slot_change_state {
+- enum touch_state state;
+- unsigned long axes[NLONGS(ABS_CNT)]; /* bitmask for updated axes */
+-};
+-
+-static int sync_mt_state(struct libevdev *dev,
+- struct slot_change_state *changes_out);
++static int sync_mt_state(struct libevdev *dev);
+ static int
+ update_key_state(struct libevdev *dev, const struct input_event *e);
+
+@@ -218,6 +201,8 @@ libevdev_reset(struct libevdev *dev)
+ free(dev->phys);
+ free(dev->uniq);
+ free(dev->mt_slot_vals);
++ free(dev->mt_sync.mt_state);
++ free(dev->mt_sync.changes);
+ memset(dev, 0, sizeof(*dev));
+ dev->fd = -1;
+ dev->initialized = false;
+@@ -347,7 +332,11 @@ free_slots(struct libevdev *dev)
+ {
+ dev->num_slots = -1;
+ free(dev->mt_slot_vals);
++ free(dev->mt_sync.changes);
++ free(dev->mt_sync.mt_state);
+ dev->mt_slot_vals = NULL;
++ dev->mt_sync.changes = NULL;
++ dev->mt_sync.mt_state = NULL;
+ }
+
+ static int
+@@ -357,7 +346,11 @@ init_slots(struct libevdev *dev)
+ int rc = 0;
+
+ free(dev->mt_slot_vals);
++ free(dev->mt_sync.changes);
++ free(dev->mt_sync.mt_state);
+ dev->mt_slot_vals = NULL;
++ dev->mt_sync.changes = NULL;
++ dev->mt_sync.mt_state = NULL;
+
+ /* devices with ABS_RESERVED aren't MT devices,
+ see the documentation for multitouch-related
+@@ -381,6 +374,19 @@ init_slots(struct libevdev *dev)
+ }
+ dev->current_slot = abs_info->value;
+
++ dev->mt_sync.mt_state_sz = sizeof(*dev->mt_sync.mt_state) +
++ dev->num_slots * sizeof(int32_t);
++ dev->mt_sync.mt_state = calloc(1, dev->mt_sync.mt_state_sz);
++
++ dev->mt_sync.changes_sz = dev->num_slots *
++ sizeof(dev->mt_sync.changes[0]);
++ dev->mt_sync.changes = malloc(dev->mt_sync.changes_sz);
++
++ if (!dev->mt_sync.changes || !dev->mt_sync.mt_state) {
++ rc = -ENOMEM;
++ goto out;
++ }
++
+ reset_tracking_ids(dev);
+ out:
+ return rc;
+@@ -536,10 +542,8 @@ libevdev_set_fd(struct libevdev* dev, int fd)
+ if (rc != 0)
+ goto out;
+
+- if (dev->num_slots != -1) {
+- struct slot_change_state unused[dev->num_slots];
+- sync_mt_state(dev, unused);
+- }
++ if (dev->num_slots != -1)
++ sync_mt_state(dev);
+
+ rc = init_event_queue(dev);
+ if (rc < 0) {
+@@ -674,32 +678,27 @@ out:
+ }
+
+ static int
+-sync_mt_state(struct libevdev *dev,
+- struct slot_change_state changes_out[dev->num_slots])
++sync_mt_state(struct libevdev *dev)
+ {
+-#define MAX_SLOTS 256
+ int rc = 0;
+- struct slot_change_state changes[MAX_SLOTS] = {0};
++ struct mt_sync_state *mt_state = dev->mt_sync.mt_state;
++ struct slot_change_state *changes = dev->mt_sync.changes;
+
+- for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) {
+- /* EVIOCGMTSLOTS required format */
+- struct mt_sync_state {
+- uint32_t code;
+- int32_t val[MAX_SLOTS];
+- } mt_state;
++ memset(dev->mt_sync.changes, 0, dev->mt_sync.changes_sz);
+
++ for (int axis = ABS_MT_MIN; axis <= ABS_MT_MAX; axis++) {
+ if (axis == ABS_MT_SLOT ||
+ !libevdev_has_event_code(dev, EV_ABS, axis))
+ continue;
+
+- mt_state.code = axis;
+- rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(mt_state)), &mt_state);
++ mt_state->code = axis;
++ rc = ioctl(dev->fd, EVIOCGMTSLOTS(dev->mt_sync.mt_state_sz), mt_state);
+ if (rc < 0)
+ goto out;
+
+- for (int slot = 0; slot < min(MAX_SLOTS, dev->num_slots); slot++) {
++ for (int slot = 0; slot < dev->num_slots; slot++) {
+ int val_before = *slot_value(dev, slot, axis),
+- val_after = mt_state.val[slot];
++ val_after = mt_state->val[slot];
+
+ if (axis == ABS_MT_TRACKING_ID) {
+ if (val_before == -1 && val_after != -1) {
+@@ -728,14 +727,12 @@ sync_mt_state(struct libevdev *dev,
+ }
+ }
+
+- memcpy(changes_out, changes, sizeof(*changes) * dev->num_slots);
+ out:
+ return rc;
+ }
+
+ static void
+ terminate_slots(struct libevdev *dev,
+- const struct slot_change_state changes[dev->num_slots],
+ int *last_reported_slot)
+ {
+ const unsigned int map[] = {BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP,
+@@ -743,6 +740,7 @@ terminate_slots(struct libevdev *dev,
+ BTN_TOOL_QUINTTAP};
+ bool touches_stopped = false;
+ int ntouches_before = 0, ntouches_after = 0;
++ struct slot_change_state *changes = dev->mt_sync.changes;
+
+ /* For BTN_TOOL_* emulation, we need to know how many touches we had
+ * before and how many we have left once we terminate all the ones
+@@ -806,10 +804,10 @@ terminate_slots(struct libevdev *dev,
+
+ static int
+ push_mt_sync_events(struct libevdev *dev,
+- const struct slot_change_state changes[dev->num_slots],
+ int last_reported_slot)
+ {
+ struct input_absinfo abs_info;
++ struct slot_change_state *changes = dev->mt_sync.changes;
+ int rc;
+
+ for (int slot = 0; slot < dev->num_slots; slot++) {
+@@ -916,8 +914,6 @@ sync_state(struct libevdev *dev)
+ int rc = 0;
+ bool want_mt_sync = false;
+ int last_reported_slot = 0;
+- struct slot_change_state changes[dev->num_slots > 0 ? dev->num_slots : 1];
+- memset(changes, 0, sizeof(changes));
+
+ /* see section "Discarding events before synchronizing" in
+ * libevdev/libevdev.h */
+@@ -935,9 +931,9 @@ sync_state(struct libevdev *dev)
+ if (dev->num_slots > -1 &&
+ libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)) {
+ want_mt_sync = true;
+- rc = sync_mt_state(dev, changes);
++ rc = sync_mt_state(dev);
+ if (rc == 0)
+- terminate_slots(dev, changes, &last_reported_slot);
++ terminate_slots(dev, &last_reported_slot);
+ else
+ want_mt_sync = false;
+ }
+@@ -951,7 +947,7 @@ sync_state(struct libevdev *dev)
+ if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
+ rc = sync_abs_state(dev);
+ if (rc == 0 && want_mt_sync)
+- push_mt_sync_events(dev, changes, last_reported_slot);
++ push_mt_sync_events(dev, last_reported_slot);
+
+ dev->queue_nsync = queue_num_elements(dev);
+
+--
+2.25.1
+
diff --git a/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch b/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch
deleted file mode 100644
index 94aebeaf..00000000
--- a/pkg/libevdev/patch/0002-Avoid-initializer-index-range.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 2c63dd5278059b4513a265299915c4237e5b0178 Mon Sep 17 00:00:00 2001
-From: Michael Forney <mforney@mforney.org>
-Date: Sun, 16 Jun 2019 17:14:18 -0700
-Subject: [PATCH] Avoid initializer index range
-Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11
-
----
- libevdev/libevdev.c | 2 +-
- libevdev/make-event-names.py | 1 -
- 2 files changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c
-index d750186..29cb615 100644
---- a/libevdev/libevdev.c
-+++ b/libevdev/libevdev.c
-@@ -1708,7 +1708,7 @@ libevdev_property_get_name(unsigned int prop)
- LIBEVDEV_EXPORT int
- libevdev_event_type_get_max(unsigned int type)
- {
-- if (type > EV_MAX)
-+ if (type > EV_MAX || !ev_max[type])
- return -1;
-
- return ev_max[type];
-diff --git a/libevdev/make-event-names.py b/libevdev/make-event-names.py
-index 716c1d7..de3a725 100755
---- a/libevdev/make-event-names.py
-+++ b/libevdev/make-event-names.py
-@@ -94,7 +94,6 @@ def print_map(bits):
- print("#pragma GCC diagnostic ignored \"-Woverride-init\"")
- print("#endif")
- print("static const int ev_max[EV_MAX + 1] = {")
-- print(" [0 ... EV_MAX] = -1,")
- for prefix in prefixes:
- if prefix in ["BTN_", "EV_", "INPUT_PROP_", "MT_TOOL_"]:
- continue
---
-2.23.0
-
diff --git a/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch b/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch
deleted file mode 100644
index 7063ad8f..00000000
--- a/pkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 296ede81584f7490196e29a95a8b2655efcc121e Mon Sep 17 00:00:00 2001
-From: Michael Forney <mforney@mforney.org>
-Date: Sun, 16 Jun 2019 17:18:00 -0700
-Subject: [PATCH] Only use GCC pragma on GCC
-Upstream: https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/11
-
----
- libevdev/make-event-names.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libevdev/make-event-names.py b/libevdev/make-event-names.py
-index de3a725..9612440 100755
---- a/libevdev/make-event-names.py
-+++ b/libevdev/make-event-names.py
-@@ -89,7 +89,7 @@ def print_map(bits):
- print("#if __clang__")
- print("#pragma clang diagnostic push")
- print("#pragma clang diagnostic ignored \"-Winitializer-overrides\"")
-- print("#else")
-+ print("#elif __GNUC__")
- print("#pragma GCC diagnostic push")
- print("#pragma GCC diagnostic ignored \"-Woverride-init\"")
- print("#endif")
-@@ -101,7 +101,7 @@ def print_map(bits):
- print("};")
- print("#if __clang__")
- print("#pragma clang diagnostic pop /* \"-Winitializer-overrides\" */")
-- print("#else")
-+ print("#elif __GNUC__")
- print("#pragma GCC diagnostic pop /* \"-Woverride-init\" */")
- print("#endif");
- print("")
---
-2.20.1
-