logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: f505a4168e95b879438dfc8e3b84f07c531eb8ad
parent 379d4a92f3ba42b200bac190877ed1804ef1d782
Author: Michael Forney <mforney@mforney.org>
Date:   Tue,  3 Mar 2020 01:15:16 -0800

libevdev: Update to 1.9.0

Port eventnames script to lua.

Diffstat:

Mpkg/libevdev/config.h40+---------------------------------------
Dpkg/libevdev/eventnames.awk183-------------------------------------------------------------------------------
Apkg/libevdev/eventnames.lua181+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpkg/libevdev/gen.lua7++++---
Dpkg/libevdev/patch/0001-Avoid-statement-expressions.patch78------------------------------------------------------------------------------
Apkg/libevdev/patch/0001-Revert-switch-to-VLAs-for-multitouch-state.patch277+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dpkg/libevdev/patch/0002-Avoid-initializer-index-range.patch39---------------------------------------
Dpkg/libevdev/patch/0003-Only-use-GCC-pragma-on-GCC.patch35-----------------------------------
Mpkg/libevdev/ver2+-
9 files changed, 464 insertions(+), 378 deletions(-)

diff --git a/pkg/libevdev/config.h b/pkg/libevdev/config.h @@ -1,39 +1 @@ -#define HAVE_DLFCN_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_LIBM 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_UNISTD_H 1 -#define LT_OBJDIR ".libs/" -#define PACKAGE "libevdev" -#define PACKAGE_BUGREPORT "https://bugs.freedesktop.org/enter_bug.cgi?product=libevdev" -#define PACKAGE_NAME "libevdev" -#define PACKAGE_STRING "libevdev 1.8.0" -#define PACKAGE_TARNAME "libevdev" -#define PACKAGE_URL "http://freedesktop.org/wiki/Software/libevdev/" -#define PACKAGE_VERSION "1.8.0" -#define STDC_HEADERS 1 -#ifndef _ALL_SOURCE -# define _ALL_SOURCE 1 -#endif -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif -#ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS 1 -#endif -#ifndef _TANDEM_SOURCE -# define _TANDEM_SOURCE 1 -#endif -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif -#define VERSION "1.8.0" -/* #undef _MINIX */ -/* #undef _POSIX_1_SOURCE */ -/* #undef _POSIX_SOURCE */ +#define _GNU_SOURCE 1 diff --git a/pkg/libevdev/eventnames.awk b/pkg/libevdev/eventnames.awk @@ -1,183 +0,0 @@ -BEGIN { - duplicates["EV_VERSION"] = 1 - duplicates["BTN_MISC"] = 1 - duplicates["BTN_MOUSE"] = 1 - duplicates["BTN_JOYSTICK"] = 1 - duplicates["BTN_GAMEPAD"] = 1 - duplicates["BTN_DIGI"] = 1 - duplicates["BTN_WHEEL"] = 1 - duplicates["BTN_TRIGGER_HAPPY"] = 1 - duplicates["SW_MAX"] = 1 - duplicates["REP_MAX"] = 1 - - prefixes[++numprefixes] = "EV" - prefixes[++numprefixes] = "REL" - prefixes[++numprefixes] = "ABS" - prefixes[++numprefixes] = "KEY" - prefixes[++numprefixes] = "BTN" - prefixes[++numprefixes] = "LED" - prefixes[++numprefixes] = "SND" - prefixes[++numprefixes] = "MSC" - prefixes[++numprefixes] = "SW" - prefixes[++numprefixes] = "FF" - prefixes[++numprefixes] = "SYN" - prefixes[++numprefixes] = "REP" - prefixes[++numprefixes] = "INPUT_PROP" - prefixes[++numprefixes] = "MT_TOOL" - - code_prefixes[++numcode_prefixes] = "ABS" - code_prefixes[++numcode_prefixes] = "BTN" - code_prefixes[++numcode_prefixes] = "FF" - code_prefixes[++numcode_prefixes] = "KEY" - code_prefixes[++numcode_prefixes] = "LED" - code_prefixes[++numcode_prefixes] = "MSC" - code_prefixes[++numcode_prefixes] = "REL" - code_prefixes[++numcode_prefixes] = "REP" - code_prefixes[++numcode_prefixes] = "SND" - code_prefixes[++numcode_prefixes] = "SW" - code_prefixes[++numcode_prefixes] = "SYN" - - addbtns["BTN_A"] = 1 - addbtns["BTN_B"] = 1 - addbtns["BTN_X"] = 1 - addbtns["BTN_Y"] = 1 - - skip["BTN"] = 1 - skip["EV"] = 1 - skip["INPUT_PROP"] = 1 - skip["MT_TOOL"] = 1 -} - -function print_bits(prefix) { - printf "static const char * const %s_map[%s_MAX + 1] = {\n", tolower(prefix), prefix - for (j = 1; j <= numbits[prefix]; ++j) { - name = bits[prefix, j] - printf " [%s] = \"%s\",\n", name, name - } - if (prefix == "KEY") { - for (j = 1; j <= numbits["BTN"]; ++j) { - name = bits["BTN", j] - printf " [%s] = \"%s\",\n", name, name - } - } - print "};" - print "" -} - -function print_map() { - print "static const char * const * const event_type_map[EV_MAX + 1] = {" - for (i = 1; i <= numprefixes; ++i) { - prefix = prefixes[i] - if (prefix in skip) - continue - printf " [EV_%s] = %s_map,\n", prefix, tolower(prefix) - } - print "};" - print "" - - print "#if __clang__" - print "#pragma clang diagnostic push" - print "#pragma clang diagnostic ignored \"-Winitializer-overrides\"" - print "#elif __GNUC__" - print "#pragma GCC diagnostic push" - print "#pragma GCC diagnostic ignored \"-Woverride-init\"" - print "#endif" - print "static const int ev_max[EV_MAX + 1] = {" - for (i = 1; i <= numprefixes; ++i) { - prefix = prefixes[i] - if (prefix in skip) - continue - printf " [EV_%s] = %s_MAX,\n", prefix, prefix - } - print "};" - print "#if __clang__" - print "#pragma clang diagnostic pop /* \"-Winitializer-overrides\" */" - print "#elif __GNUC__" - print "#pragma GCC diagnostic pop /* \"-Woverride-init\" */" - print "#endif" - print "" -} - -function print_lookup_entry(name, sort) { - printf " { .name = \"%s\", .value = %s },\n", name, name | sort -} - -function print_lookup(prefix) { - sort = "sort -t '\"' -k 2" - for (j = 1; j <= numbits[prefix]; ++j) - print_lookup_entry(bits[prefix, j], sort) - if (prefix == "BTN") { - for (name in addbtns) - print_lookup_entry(name, sort) - } - maxname = prefix "_MAX" - if (maxname in duplicates) - print_lookup_entry(maxname, sort) - close(sort) -} - -function print_lookup_table() { - print "struct name_entry {" - print " const char *name;" - print " unsigned int value;" - print "};" - print "" - print "static const struct name_entry tool_type_names[] = {" - print_lookup("MT_TOOL") - print "};" - print "" - print "static const struct name_entry ev_names[] = {" - print_lookup("EV") - print "};" - print "" - - print "static const struct name_entry code_names[] = {" - for (i = 1; i <= numcode_prefixes; ++i) - print_lookup(code_prefixes[i]) - print "};" - print "" - print "static const struct name_entry prop_names[] = {" - print_lookup("INPUT_PROP") - print "};" - print "" -} - -function print_mapping_table() { - print "/* THIS FILE IS GENERATED, DO NOT EDIT */" - print "" - print "#ifndef EVENT_NAMES_H" - print "#define EVENT_NAMES_H" - print "" - - for (i = 1; i <= numprefixes; ++i) { - prefix = prefixes[i] - if (prefix == "BTN") - continue - print_bits(prefix) - } - - print_map() - print_lookup_table() - - print "#endif /* EVENT_NAMES_H */" -} - -/^#define/ { - for (i = 1; i <= numprefixes; ++i) { - prefix = prefixes[i] - if ($3 !~ /^[0-9a-fx]+$/ || substr($2, 1, length(prefix) + 1) != prefix "_") - continue - if ($2 in duplicates) - next - idx = indexes[prefix, $3] - if (!idx) { - idx = ++numbits[prefix] - indexes[prefix, $3] = idx - } - bits[prefix, idx] = $2 - } -} - -END { - print_mapping_table() -} diff --git a/pkg/libevdev/eventnames.lua b/pkg/libevdev/eventnames.lua @@ -0,0 +1,181 @@ +local duplicates = { + EV_VERSION=true, + BTN_MISC=true, + BTN_MOUSE=true, + BTN_JOYSTICK=true, + BTN_GAMEPAD=true, + BTN_DIGI=true, + BTN_WHEEL=true, + BTN_TRIGGER_HAPPY=true, + SW_MAX=true, + REP_MAX=true, + FF_STATUS_MAX=true, +} + +local skip = { + BTN=true, + EV=true, + INPUT_PROP=true, + MT_TOOL=true, +} + +local prefixes = { + 'EV', + 'REL', + 'ABS', + 'KEY', + 'BTN', + 'LED', + 'SND', + 'MSC', + 'SW', + 'FF', + 'SYN', + 'REP', + 'INPUT_PROP', + 'MT_TOOL', +} + +local bits = {} +for _, prefix in ipairs(prefixes) do + bits[prefix] = {} +end +bits.EV.map = {} + +local function lookuptable(prefix) + local entries = {} + for _, name in ipairs(bits[prefix]) do + table.insert(entries, name) + end + local max = prefix..'_MAX' + if duplicates[max] then + table.insert(entries, max) + end + table.sort(entries) + for _, name in ipairs(entries) do + io.write(string.format(' { .name = "%s", .value = %s },\n', name, name)) + end +end + +for i = 1, #arg do + for line in io.lines(arg[i]) do + local name, value = line:match('^#define%s+(%g+)%s+([%xx]+)%f[^%g]') + value = tonumber(value) + if name and not duplicates[name] then + for prefix, b in pairs(bits) do + if name:sub(1, #prefix + 1) == prefix..'_' then + if b.map then + b.map[value] = name + b.map[name] = value + end + table.insert(b, name) + end + end + end + end +end + +io.write[[ +/* THIS FILE IS GENERATED, DO NOT EDIT */ + +#ifndef EVENT_NAMES_H +#define EVENT_NAMES_H + +]] +for _, prefix in ipairs(prefixes) do + if prefix ~= 'BTN' then + io.write(string.format('static const char * const %s_map[%s_MAX + 1] = {\n', prefix:lower(), prefix)) + for _, name in ipairs(bits[prefix]) do + io.write(string.format(' [%s] = "%s",\n', name, name)) + end + if prefix == 'KEY' then + for _, name in ipairs(bits.BTN) do + io.write(string.format(' [%s] = "%s",\n', name, name)) + end + end + io.write[[ +}; + +]] + end +end +for _, name in ipairs{'BTN_A', 'BTN_B', 'BTN_X', 'BTN_Y'} do + table.insert(bits.BTN, name) +end +io.write[[ +static const char * const * const event_type_map[EV_MAX + 1] = { +]] +for _, prefix in ipairs(prefixes) do + if not skip[prefix] then + print(string.format(' [EV_%s] = %s_map,', prefix, prefix:lower())) + end +end +io.write[[ +}; + +#if __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winitializer-overrides" +#elif __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverride-init" +#endif +static const int ev_max[EV_MAX + 1] = { +]] +for i = 0, bits.EV.map.EV_MAX do + local name = bits.EV.map[i] + if name and bits[name:sub(4)] then + io.write(string.format(' %s_MAX,\n', name:sub(4))) + else + io.write(' -1,\n') + end +end +io.write[[ +}; +#if __clang__ +#pragma clang diagnostic pop /* "-Winitializer-overrides" */ +#elif __GNUC__ +#pragma GCC diagnostic pop /* "-Woverride-init" */ +#endif + +struct name_entry { + const char *name; + unsigned int value; +}; + +static const struct name_entry tool_type_names[] = { +]] +lookuptable('MT_TOOL') +io.write[[ +}; + +static const struct name_entry ev_names[] = { +]] +lookuptable('EV') +io.write[[ +}; + +static const struct name_entry code_names[] = { +]] +lookuptable('ABS') +lookuptable('BTN') +lookuptable('FF') +lookuptable('KEY') +lookuptable('LED') +lookuptable('MSC') +lookuptable('REL') +lookuptable('REP') +lookuptable('SND') +lookuptable('SW') +lookuptable('SYN') +io.write[[ +}; + +static const struct name_entry prop_names[] = { +]] +lookuptable('INPUT_PROP') +io.write[[ +}; + +#endif /* EVENT_NAMES_H */ +]] diff --git a/pkg/libevdev/gen.lua b/pkg/libevdev/gen.lua @@ -12,11 +12,12 @@ pkg.deps = { 'pkg/linux-headers/headers', } -build('awk', '$outdir/event-names.h', { +rule('eventnames', 'lua5.2 $dir/eventnames.lua $in >$out') +build('eventnames', '$outdir/event-names.h', { '$srcdir/include/linux/input.h', '$srcdir/include/linux/input-event-codes.h', - '|', '$dir/eventnames.awk', -}, {expr='-f $dir/eventnames.awk'}) + '|', '$dir/eventnames.lua', +}) lib('libevdev.a', {'libevdev/libevdev.c', 'libevdev/libevdev-names.c'}, {'$outdir/event-names.h'}) file('lib/libevdev.a', '644', '$outdir/libevdev.a') diff --git a/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch b/pkg/libevdev/patch/0001-Avoid-statement-expressions.patch @@ -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 @@ -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 @@ -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 @@ -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 - diff --git a/pkg/libevdev/ver b/pkg/libevdev/ver @@ -1 +1 @@ -1.8.0 r1 +1.9.0 r0