usb-msc: support commands without payload
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 16 Nov 2011 12:02:45 +0000 (13:02 +0100)
committerKevin O'Connor <kevin@koconnor.net>
Fri, 18 Nov 2011 01:58:51 +0000 (20:58 -0500)
This lets the usb-msc driver send TEST UNIT READY commands.

Modified to avoid divide by zero by Kevin O'Connor <kevin@koconnor.net>

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/usb-msc.c

index 13ef93e930db4c5b1ec7a38890b97da3d32e0527..52b41b0db0caa18448716e78c4569b68f9f170f4 100644 (file)
@@ -79,9 +79,11 @@ usb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
         goto fail;
 
     // Transfer data from device.
-    ret = usb_send_bulk(bulkin, USB_DIR_IN, op->buf_fl, bytes);
-    if (ret)
-        goto fail;
+    if (bytes) {
+        ret = usb_send_bulk(bulkin, USB_DIR_IN, op->buf_fl, bytes);
+        if (ret)
+            goto fail;
+    }
 
     // Transfer csw info.
     struct csw_s csw;
@@ -95,7 +97,8 @@ usb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
     if (csw.bCSWStatus == 2)
         goto fail;
 
-    op->count -= csw.dCSWDataResidue / blocksize;
+    if (blocksize)
+        op->count -= csw.dCSWDataResidue / blocksize;
     return DISK_RET_EBADTRACK;
 
 fail: