- d_curr = (d_curr+1)%d_nblocks;
- buf = &d_buffer[d_curr*d_block_size];
-
- if (d_outstanding_write != d_nblocks) {
- d_outstanding_write++;
- } else {
- retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
- if (retval < 0) {
- fprintf(stderr, "%s: usb_reap_async: %s\n",
- __FUNCTION__, usb_strerror());
- return retval;
- }
- }
+ while (bytes_to_write > 0) {
+ d_curr = (d_curr+1)%d_nblocks;
+ buf = &d_buffer[d_curr*d_block_size];
+
+ if (d_outstanding_write != d_nblocks) {
+ d_outstanding_write++;
+ } else {
+ retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
+ if (retval < 0) {
+ fprintf(stderr, "%s: usb_reap_async: %s\n",
+ __FUNCTION__, usb_strerror());
+ return retval;
+ }
+ }