diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2022-02-02 11:52:32 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2022-02-03 14:39:42 +1000 |
commit | 146e8d340a09614c7b59275f48d0005a2e768767 (patch) | |
tree | 293aa9829c641ec077e383fa2652928bc5001ef7 | |
parent | a529e92b1144b59111a6a16e35169db128ce216f (diff) | |
download | xf86-input-wacom-146e8d340a09614c7b59275f48d0005a2e768767.tar.gz |
x11: handle valuators with a first_valuator != 0 correctly
xf86Post*EventP requires that the valuators array index 0 is whatever
first_valuator is.
Found in #222
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/x11/xf86Wacom.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/x11/xf86Wacom.c b/src/x11/xf86Wacom.c index 36ee19e..6bbdf12 100644 --- a/src/x11/xf86Wacom.c +++ b/src/x11/xf86Wacom.c @@ -371,12 +371,11 @@ void wcmEmitKeycode(WacomDevicePtr priv, int keycode, int state) } static inline void -convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuators[7]) +convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuators_out[7]) { int first = 7; int last = -1; - - memset(valuators, 0, 7 * sizeof(valuators[0])); + int valuators[7] = {0}; for (enum WacomAxisType which = _WACOM_AXIS_LAST; which > 0; which >>= 1) { @@ -415,13 +414,15 @@ convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuato first = 0; *first_out = first; *num_out = last - first + 1; + + memcpy(valuators_out, &valuators[first], *num_out * sizeof(valuators[0])); } void wcmEmitProximity(WacomDevicePtr priv, bool is_proximity_in, const WacomAxisData *axes) { InputInfoPtr pInfo = priv->frontend; - int valuators[7]; + int valuators[7] = {0}; int first_val, num_vals; convertAxes(axes, &first_val, &num_vals, valuators); @@ -432,7 +433,7 @@ void wcmEmitProximity(WacomDevicePtr priv, bool is_proximity_in, void wcmEmitMotion(WacomDevicePtr priv, bool is_absolute, const WacomAxisData *axes) { InputInfoPtr pInfo = priv->frontend; - int valuators[7]; + int valuators[7] = {0}; int first_val, num_vals; convertAxes(axes, &first_val, &num_vals, valuators); @@ -443,7 +444,7 @@ void wcmEmitMotion(WacomDevicePtr priv, bool is_absolute, const WacomAxisData *a void wcmEmitButton(WacomDevicePtr priv, bool is_absolute, int button, bool is_press, const WacomAxisData *axes) { InputInfoPtr pInfo = priv->frontend; - int valuators[7]; + int valuators[7] = {0}; int first_val, num_vals; convertAxes(axes, &first_val, &num_vals, valuators); |