Fixed setting the GUID for Bluetooth joysticks
authorSam Lantinga <slouken@libsdl.org>
Fri, 01 Feb 2013 17:09:01 -0800
changeset 6831 935b871e1ffe
parent 6830 0cd3e2e9b2c5
child 6832 156e608ec4ef
Fixed setting the GUID for Bluetooth joysticks
src/joystick/linux/SDL_sysjoystick.c
--- 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;
 }