- Add support for libusbhid in 32-bit compatibility mode.
- Add missing check for ugd_actlen being too small. - Add missing inclusion guard to usbvar.h header file. - This also fixes buildworld breakage since r213852.
This commit is contained in:
parent
21647a4834
commit
5b550686a5
@ -19,4 +19,8 @@ SRCS= descr.c descr_compat.c parse.c usage.c data.c
|
||||
|
||||
INCS= usbhid.h
|
||||
|
||||
.if defined(COMPAT_32BIT)
|
||||
CFLAGS+= -DCOMPAT_32BIT
|
||||
.endif
|
||||
|
||||
.include <bsd.lib.mk>
|
||||
|
@ -103,7 +103,7 @@ hid_get_report_desc(int fd)
|
||||
memset(&ugd, 0, sizeof(ugd));
|
||||
|
||||
/* get actual length first */
|
||||
ugd.ugd_data = NULL;
|
||||
ugd.ugd_data = hid_pass_ptr(NULL);
|
||||
ugd.ugd_maxlen = 65535;
|
||||
if (ioctl(fd, USB_GET_REPORT_DESC, &ugd) < 0) {
|
||||
#ifdef HID_COMPAT7
|
||||
@ -124,7 +124,7 @@ hid_get_report_desc(int fd)
|
||||
return (NULL);
|
||||
|
||||
/* fetch actual descriptor */
|
||||
ugd.ugd_data = data;
|
||||
ugd.ugd_data = hid_pass_ptr(data);
|
||||
ugd.ugd_maxlen = ugd.ugd_actlen;
|
||||
if (ioctl(fd, USB_GET_REPORT_DESC, &ugd) < 0) {
|
||||
/* could not read descriptor */
|
||||
@ -132,8 +132,15 @@ hid_get_report_desc(int fd)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* sanity check */
|
||||
if (ugd.ugd_actlen < 1) {
|
||||
/* invalid report descriptor */
|
||||
free(data);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* check END_COLLECTION */
|
||||
if (((unsigned char *)ugd.ugd_data)[ugd.ugd_actlen -1] != 0xC0) {
|
||||
if (((unsigned char *)data)[ugd.ugd_actlen -1] != 0xC0) {
|
||||
/* invalid end byte */
|
||||
free(data);
|
||||
return (NULL);
|
||||
|
@ -29,6 +29,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _USBVAR_H_
|
||||
#define _USBVAR_H_
|
||||
|
||||
struct report_desc {
|
||||
uint32_t size;
|
||||
uint8_t data[1];
|
||||
@ -41,3 +44,11 @@ int hid_set_immed_compat7(int fd, int enable);
|
||||
int hid_get_report_id_compat7(int fd);
|
||||
report_desc_t hid_get_report_desc_compat7(int fd);
|
||||
#endif
|
||||
|
||||
#ifdef COMPAT_32BIT
|
||||
#define hid_pass_ptr(ptr) ((uint64_t)(uintptr_t)(ptr))
|
||||
#else
|
||||
#define hid_pass_ptr(ptr) (ptr)
|
||||
#endif
|
||||
|
||||
#endif /* _USBVAR_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user