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;
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) {
} 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;
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;