usb/146367: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Sun May 9 09:30:08 UTC 2010


The following reply was made to PR usb/146367; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: usb/146367: commit references a PR
Date: Sun,  9 May 2010 09:21:02 +0000 (UTC)

 Author: kaiw
 Date: Sun May  9 09:20:25 2010
 New Revision: 207812
 URL: http://svn.freebsd.org/changeset/base/207812
 
 Log:
   Catch up with libusbhid merge (rev 205728).
   
   hid_get_data() now expects that the hid data passed in always contains
   the report ID byte. Thus we should not skip the the report ID byte in
   hid_interrupt().  Also, if HUP_KEYBOARD usage is an array, do not try
   to modify the 'data' pointer, instead, increase the hid_item_t field
   'pos' by 'report_size' before calling hid_get_data() during each
   iteration.
   
   PR:			usb/146367
   Reported and tested by:	Alex Deiter
   Pointy hat to:	    	kaiw
   Reviewed by:	    	emax
 
 Modified:
   head/usr.sbin/bluetooth/bthidd/hid.c
 
 Modified: head/usr.sbin/bluetooth/bthidd/hid.c
 ==============================================================================
 --- head/usr.sbin/bluetooth/bthidd/hid.c	Sun May  9 08:22:33 2010	(r207811)
 +++ head/usr.sbin/bluetooth/bthidd/hid.c	Sun May  9 09:20:25 2010	(r207812)
 @@ -130,7 +130,7 @@ hid_interrupt(bthid_session_p s, uint8_t
  	hid_item_t	h;
  	int32_t		report_id, usage, page, val,
  			mouse_x, mouse_y, mouse_z, mouse_butt,
 -			mevents, kevents;
 +			mevents, kevents, i;
  
  	assert(s != NULL);
  	assert(s->srv != NULL);
 @@ -150,8 +150,8 @@ hid_interrupt(bthid_session_p s, uint8_t
  	}
  
  	report_id = data[1];
 -	data += 2;
 -	len -= 2;
 +	data ++;
 +	len --;
  
  	hid_device = get_hid_device(&s->bdaddr);
  	assert(hid_device != NULL);
 @@ -202,17 +202,11 @@ hid_interrupt(bthid_session_p s, uint8_t
  				if (val && val < kbd_maxkey())
  					bit_set(s->keys1, val);
  
 -				data ++;
 -				len --;
 -
 -				len = min(len, h.report_size);
 -				while (len > 0) {
 +				for (i = 1; i < h.report_count; i++) {
 +					h.pos += h.report_size;
  					val = hid_get_data(data, &h);
  					if (val && val < kbd_maxkey())
  						bit_set(s->keys1, val);
 -
 -					data ++;
 -					len --;
  				}
  			}
  			break;
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-usb mailing list