1+ use std:: cmp:: max;
12use std:: fmt:: Write ;
23use std:: time:: { Duration , Instant } ;
34use libusb:: * ;
@@ -142,23 +143,25 @@ fn bulk_loopback(dev, _out) {
142143 data. len( ) ,
143144 "bulk write len {}" , len) ;
144145
145- if * len % 64 == 0 {
146+ if * len > 0 && * len % 64 == 0 {
146147 assert_eq!(
147148 dev. write_bulk( 0x01 , & [ ] , TIMEOUT )
148149 . expect( & format!( "bulk write zero-length packet" ) ) ,
149150 0 ,
150151 "bulk write zero-length packet" ) ;
151152 }
152153
153- let mut response = vec![ 0u8 ; * len] ;
154+ // Prevent libusb from instantaneously reading an empty packet on Windows when
155+ // zero-sized buffer is passed.
156+ let mut response = vec![ 0u8 ; max( * len, 1 ) ] ;
154157
155158 assert_eq!(
156159 dev. read_bulk( 0x81 , & mut response, TIMEOUT )
157160 . expect( & format!( "bulk read len {}" , len) ) ,
158161 data. len( ) ,
159162 "bulk read len {}" , len) ;
160163
161- assert_eq!( & response, & data) ;
164+ assert_eq!( & response[ .. * len ] , & data[ .. ] ) ;
162165 }
163166}
164167
@@ -172,15 +175,17 @@ fn interrupt_loopback(dev, _out) {
172175 data. len( ) ,
173176 "interrupt write len {}" , len) ;
174177
175- let mut response = vec![ 0u8 ; * len] ;
178+ // Prevent libusb from instantaneously reading an empty packet on Windows when
179+ // zero-sized buffer is passed.
180+ let mut response = vec![ 0u8 ; max( * len, 1 ) ] ;
176181
177182 assert_eq!(
178183 dev. read_interrupt( 0x82 , & mut response, TIMEOUT )
179184 . expect( & format!( "interrupt read len {}" , len) ) ,
180185 data. len( ) ,
181186 "interrupt read len {}" , len) ;
182187
183- assert_eq!( & response, & data) ;
188+ assert_eq!( & response[ .. * len ] , & data[ .. ] ) ;
184189 }
185190}
186191
0 commit comments