From 4c9cc53d450226e578363985b8020f1823210d99 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 23 Nov 2005 12:24:23 +0100 Subject: [PATCH] [PATCH] sgioread: Use correct cdb len --- sgioread.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/sgioread.c b/sgioread.c index 8670148..f678fd6 100644 --- a/sgioread.c +++ b/sgioread.c @@ -147,6 +147,20 @@ int write_the_crap(int fd_out, char *buffer, int length) return ret; } +void hdr_init(struct sg_io_hdr *hdr, char *p, char *cdb) +{ + memset(hdr, 0, sizeof(*hdr)); + + hdr->cmdp = cdb; + memset(hdr->cmdp, 0, 10); + + hdr->interface_id = 'S'; + hdr->cmd_len = 10; + hdr->dxfer_direction = SG_DXFER_FROM_DEV; + hdr->dxferp = p; + hdr->cmdp[0] = GPCMD_READ_10; +} + int main(int argc, char *argv[]) { struct sg_io_hdr *hdr; @@ -194,7 +208,6 @@ int main(int argc, char *argv[]) blocks = MAX_XFER / block_size; hdr = malloc(sizeof(*hdr)); - memset(hdr, 0, sizeof(*hdr)); ptr = malloc(blocks * block_size + block_size - 1); if (force_unaligned) { @@ -204,15 +217,6 @@ int main(int argc, char *argv[]) } else buffer = ALIGN(ptr); - hdr->cmdp = cdb; - memset(hdr->cmdp, 0, sizeof(cdb)); - - hdr->interface_id = 'S'; - hdr->cmd_len = sizeof(cdb); - hdr->dxfer_direction = SG_DXFER_FROM_DEV; - hdr->dxferp = buffer; - hdr->cmdp[0] = GPCMD_READ_10; - lba = start_lba; nr_blocks = end_lba - lba + 1; @@ -226,6 +230,8 @@ int main(int argc, char *argv[]) if (blocks > nr_blocks) blocks = nr_blocks; + hdr_init(hdr, buffer, cdb); + hdr->dxfer_len = blocks * block_size; hdr->cmdp[2] = (lba >> 24) & 0xff; hdr->cmdp[3] = (lba >> 16) & 0xff; -- 2.25.1