summaryrefslogtreecommitdiff
path: root/games/bzflag/files/patch-usbjoy.cxx
blob: c749716f656eb7ef5ec54ced6d262305e38f2d74 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--- src/platform/usbjoy.cxx.orig	Tue Jun  4 02:39:32 2002
+++ src/platform/usbjoy.cxx	Sun May  4 14:36:38 2003
@@ -46,7 +46,7 @@
 	int data_buf_offset;
 };
 
-usb_joystick *stick;
+usb_joystick *stick=NULL;
 
 usb_joystick::usb_joystick(const char *name)
 {
@@ -58,6 +58,7 @@
 	status = FALSE;
 	hids = NULL;
 	num_axis = 0;
+	report_id = 0;
 
 	if ((fd = open(name, O_RDONLY | O_NONBLOCK))<0)
 		return;
@@ -67,15 +68,27 @@
 		return;
 	}
 
+#if (__FreeBSD_version >= 470000)
+# if (__FreeBSD_version >= 500111)
+	data_buf_size = hid_report_size(rd, hid_input, report_id);
+# else
+	data_buf_size = hid_report_size(rd, report_id, hid_input);
+# endif
+#else
 	data_buf_size = hid_report_size(rd, hid_input, &report_id);
+#endif
 	if ((data_buf = (char *)malloc(data_buf_size)) == NULL) {
 		hid_dispose_report_desc(rd);
 	}
-	data_buf_offset = (report_id != 0);
+	data_buf_offset = 0;
 
 	int is_joystick = 0;
 	int interesting_hid = FALSE;
+#if (__FreeBSD_version >= 500111)
+	for (d = hid_start_parse(rd, 1 << hid_input, report_id); hid_get_item(d, &h); ) {
+#else
 	for (d = hid_start_parse(rd, 1 << hid_input); hid_get_item(d, &h); ) {
+#endif
 		int page = HID_PAGE(h.usage);
 		int usage = HID_USAGE(h.usage);
 		is_joystick = is_joystick ||