usb-joystick-segfault-fix.patch 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. Avoid segfaulting with certain USB joysticks. Patch taken from the Ubuntu
  2. package.
  3. --- joystick-20051019.orig/utils/jstest.c
  4. +++ joystick-20051019/utils/jstest.c
  5. @@ -106,15 +106,21 @@
  6. printf("Driver version is %d.%d.%d.\n",
  7. version >> 16, (version >> 8) & 0xff, version & 0xff);
  8. - printf("Joystick (%s) has %d axes (", name, axes);
  9. - for (i = 0; i < axes; i++)
  10. - printf("%s%s", i > 0 ? ", " : "", axis_names[axmap[i]]);
  11. - puts(")");
  12. -
  13. - printf("and %d buttons (", buttons);
  14. - for (i = 0; i < buttons; i++)
  15. - printf("%s%s", i > 0 ? ", " : "", button_names[btnmap[i] - BTN_MISC]);
  16. - puts(").");
  17. + if (buttons > 0 && btnmap[0] < BTN_MISC) {
  18. + /* btnmap out of range for names. Don't print any. */
  19. + printf("Joystick (%s) has %d axes ", name, axes);
  20. + printf("and %d buttons.\n", buttons);
  21. + } else {
  22. + printf("Joystick (%s) has %d axes (", name, axes);
  23. + for (i = 0; i < axes; i++)
  24. + printf("%s%s", i > 0 ? ", " : "", axis_names[axmap[i]]);
  25. + puts(")");
  26. +
  27. + printf("and %d buttons (", buttons);
  28. + for (i = 0; i < buttons; i++)
  29. + printf("%s%s", i > 0 ? ", " : "", button_names[btnmap[i] - BTN_MISC]);
  30. + puts(").");
  31. + }
  32. printf("Testing ... (interrupt to exit)\n");