Path: blob/master/thirdparty/sdl/patches/0008-fix-linux-joycon-serial-num.patch
21807 views
diff --git a/thirdparty/sdl/core/linux/SDL_udev.c b/thirdparty/sdl/core/linux/SDL_udev.c1index fbf2ff0444..d9e7e11849 1006442--- a/thirdparty/sdl/core/linux/SDL_udev.c3+++ b/thirdparty/sdl/core/linux/SDL_udev.c4@@ -277,6 +277,43 @@ bool SDL_UDEV_GetProductInfo(const char *device_path, Uint16 *vendor, Uint16 *pr5return true;6}78+bool SDL_UDEV_GetProductSerial(const char *device_path, const char **serial)9+{10+ struct stat statbuf;11+ char type;12+ struct udev_device *dev;13+ const char *val;14+15+ if (!_this) {16+ return false;17+ }18+19+ if (stat(device_path, &statbuf) < 0) {20+ return false;21+ }22+23+ if (S_ISBLK(statbuf.st_mode)) {24+ type = 'b';25+ } else if (S_ISCHR(statbuf.st_mode)) {26+ type = 'c';27+ } else {28+ return false;29+ }30+31+ dev = _this->syms.udev_device_new_from_devnum(_this->udev, type, statbuf.st_rdev);32+ if (!dev) {33+ return false;34+ }35+36+ val = _this->syms.udev_device_get_property_value(dev, "ID_SERIAL_SHORT");37+ if (val) {38+ *serial = val;39+ return true;40+ }41+42+ return false;43+}44+45void SDL_UDEV_UnloadLibrary(void)46{47if (!_this) {48diff --git a/thirdparty/sdl/core/linux/SDL_udev.h b/thirdparty/sdl/core/linux/SDL_udev.h49index 50bed36248..05b79342cd 10064450--- a/thirdparty/sdl/core/linux/SDL_udev.h51+++ b/thirdparty/sdl/core/linux/SDL_udev.h52@@ -104,6 +104,7 @@ extern bool SDL_UDEV_LoadLibrary(void);53extern void SDL_UDEV_Poll(void);54extern bool SDL_UDEV_Scan(void);55extern bool SDL_UDEV_GetProductInfo(const char *device_path, Uint16 *vendor, Uint16 *product, Uint16 *version, int *class);56+extern bool SDL_UDEV_GetProductSerial(const char *device_path, const char **serial);57extern bool SDL_UDEV_AddCallback(SDL_UDEV_Callback cb);58extern void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb);59extern const SDL_UDEV_Symbols *SDL_UDEV_GetUdevSyms(void);60diff --git a/thirdparty/sdl/joystick/linux/SDL_sysjoystick.c b/thirdparty/sdl/joystick/linux/SDL_sysjoystick.c61index ea73821c06..70fed1cf57 10064462--- a/thirdparty/sdl/joystick/linux/SDL_sysjoystick.c63+++ b/thirdparty/sdl/joystick/linux/SDL_sysjoystick.c64@@ -1587,6 +1587,13 @@ static bool LINUX_JoystickOpen(SDL_Joystick *joystick, int device_index)65item_sensor->hwdata = joystick->hwdata;66}6768+ #ifdef SDL_USE_LIBUDEV69+ const char *serial = NULL;70+ if (SDL_UDEV_GetProductSerial(item->path, &serial)) {71+ joystick->serial = SDL_strdup(serial);72+ }73+ #endif74+75// mark joystick as fresh and ready76joystick->hwdata->fresh = true;77787980