Avoid segfaulting with certain USB joysticks. Patch taken from the Ubuntu package. --- joystick-20051019.orig/utils/jstest.c +++ joystick-20051019/utils/jstest.c @@ -106,15 +106,21 @@ printf("Driver version is %d.%d.%d.\n", version >> 16, (version >> 8) & 0xff, version & 0xff); - printf("Joystick (%s) has %d axes (", name, axes); - for (i = 0; i < axes; i++) - printf("%s%s", i > 0 ? ", " : "", axis_names[axmap[i]]); - puts(")"); - - printf("and %d buttons (", buttons); - for (i = 0; i < buttons; i++) - printf("%s%s", i > 0 ? ", " : "", button_names[btnmap[i] - BTN_MISC]); - puts(")."); + if (buttons > 0 && btnmap[0] < BTN_MISC) { + /* btnmap out of range for names. Don't print any. */ + printf("Joystick (%s) has %d axes ", name, axes); + printf("and %d buttons.\n", buttons); + } else { + printf("Joystick (%s) has %d axes (", name, axes); + for (i = 0; i < axes; i++) + printf("%s%s", i > 0 ? ", " : "", axis_names[axmap[i]]); + puts(")"); + + printf("and %d buttons (", buttons); + for (i = 0; i < buttons; i++) + printf("%s%s", i > 0 ? ", " : "", button_names[btnmap[i] - BTN_MISC]); + puts(")."); + } printf("Testing ... (interrupt to exit)\n");