From 2a6b53d96b44bae00b3a3e2bec9c3c7fd1e58b5c Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sun, 5 Jun 2022 12:48:44 +0900 Subject: [PATCH] internal/gamepad: bug fix: wrong offset especially on 32bit Linux Closes #2122 --- internal/gamepad/gamepad_linux.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/gamepad/gamepad_linux.go b/internal/gamepad/gamepad_linux.go index 64b53ad28..8dcb6793b 100644 --- a/internal/gamepad/gamepad_linux.go +++ b/internal/gamepad/gamepad_linux.go @@ -306,11 +306,16 @@ func (g *nativeGamepad) update(gamepad *gamepads) error { return fmt.Errorf("gamepad: Read failed: %w", err) } + const ( + offsetTyp = unsafe.Offsetof(input_event{}.typ) + offsetCode = unsafe.Offsetof(input_event{}.code) + offsetValue = unsafe.Offsetof(input_event{}.value) + ) // time is not used. e := input_event{ - typ: uint16(buf[16]) | uint16(buf[17])<<8, - code: uint16(buf[18]) | uint16(buf[19])<<8, - value: int32(buf[20]) | int32(buf[21])<<8 | int32(buf[22])<<16 | int32(buf[23])<<24, + typ: uint16(buf[offsetTyp]) | uint16(buf[offsetTyp+1])<<8, + code: uint16(buf[offsetCode]) | uint16(buf[offsetCode+1])<<8, + value: int32(buf[offsetValue]) | int32(buf[offsetValue+1])<<8 | int32(buf[offsetValue+2])<<16 | int32(buf[offsetValue+3])<<24, } if e.typ == unix.EV_SYN {