Move the device-specific code out into the top-level function.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 drivers/usb/emul/sandbox_flash.c | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/emul/sandbox_flash.c b/drivers/usb/emul/sandbox_flash.c
index e699f89793d..7b9a99c1a38 100644
--- a/drivers/usb/emul/sandbox_flash.c
+++ b/drivers/usb/emul/sandbox_flash.c
@@ -206,8 +206,19 @@ static void setup_response(struct sandbox_flash_priv *priv)
        csw->bCSWStatus = CSWSTATUS_GOOD;
 }
 
-static void handle_read(struct sandbox_flash_priv *priv, ulong lba,
-                       ulong transfer_len)
+/**
+ * handle_read() - prepare for reading data from the backing file
+ *
+ * This seeks to the correct file position and sets info->buff_used to the
+ * correct size.
+ *
+ * @priv: Private information
+ * @lba: Start block to read from
+ * @transfer_length: Number of blocks to read
+ * @return 0 if OK, -EIO on failure
+ */
+static int handle_read(struct sandbox_flash_priv *priv, ulong lba,
+                      ulong transfer_len)
 {
        struct scsi_emul_info *info = &priv->eminfo;
 
@@ -216,10 +227,10 @@ static void handle_read(struct sandbox_flash_priv *priv, 
ulong lba,
        if (priv->fd != -1) {
                os_lseek(priv->fd, lba * info->block_size, OS_SEEK_SET);
                info->buff_used = transfer_len * info->block_size;
-               setup_response(priv);
-       } else {
-               setup_fail_response(priv);
+               return 0;
        }
+
+       return -EIO;
 }
 
 static int handle_ufi_command(struct sandbox_flash_plat *plat,
@@ -265,8 +276,12 @@ static int handle_ufi_command(struct sandbox_flash_plat 
*plat,
        case SCSI_READ10: {
                struct scsi_read10_req *req = (void *)buff;
 
-               handle_read(priv, be32_to_cpu(req->lba),
-                           be16_to_cpu(req->xfer_len));
+               if (!handle_read(priv, be32_to_cpu(req->lba),
+                                be16_to_cpu(req->xfer_len)))
+                       setup_response(priv);
+               else
+                       setup_fail_response(priv);
+
                break;
        }
        default:
-- 
2.37.2.672.g94769d06f0-goog

Reply via email to