--- a/src/joystick/linux/SDL_sysjoystick.c Thu Jan 31 08:45:30 2013 -0800
+++ b/src/joystick/linux/SDL_sysjoystick.c Fri Feb 01 17:09:01 2013 -0800
@@ -217,16 +217,27 @@
return 0;
}
+#ifdef DEBUG_JOYSTICK
+ printf("Joystick: %s, bustype = %d, vendor = 0x%x, product = 0x%x, version = %d\n", namebuf, inpid.bustype, inpid.vendor, inpid.product, inpid.version);
+#endif
+
+ SDL_memset(guid->data, 0, sizeof(guid->data));
+
/* We only need 16 bits for each of these; space them out to fill 128. */
/* Byteswap so devices get same GUID on little/big endian platforms. */
*(guid16++) = SDL_SwapLE16(inpid.bustype);
*(guid16++) = 0;
- *(guid16++) = SDL_SwapLE16(inpid.vendor);
- *(guid16++) = 0;
- *(guid16++) = SDL_SwapLE16(inpid.product);
- *(guid16++) = 0;
- *(guid16++) = SDL_SwapLE16(inpid.version);
- *(guid16++) = 0;
+
+ if (inpid.vendor && inpid.product && inpid.version) {
+ *(guid16++) = SDL_SwapLE16(inpid.vendor);
+ *(guid16++) = 0;
+ *(guid16++) = SDL_SwapLE16(inpid.product);
+ *(guid16++) = 0;
+ *(guid16++) = SDL_SwapLE16(inpid.version);
+ *(guid16++) = 0;
+ } else {
+ SDL_strlcpy((char*)guid16, namebuf, sizeof(guid->data) - 4);
+ }
return 1;
}