diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2014-01-22 04:23:22 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2014-01-22 04:23:22 +0000 |
commit | 2bb9e742c191f73cf50ad5e113fef7bf88f46f61 (patch) | |
tree | 1475ccb6a8003948033315eee968918e3eaff5c1 /lib/sg_cmds_extra.c | |
parent | 07b9f9dcf8c2f836be3d35ac35a457a993de23e0 (diff) | |
download | sg3_utils-2bb9e742c191f73cf50ad5e113fef7bf88f46f61.tar.gz |
sg_cmds_extra: fix sa bug in sg_ll_3party_copy_out()
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@546 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'lib/sg_cmds_extra.c')
-rw-r--r-- | lib/sg_cmds_extra.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/lib/sg_cmds_extra.c b/lib/sg_cmds_extra.c index d359b2e0..4831123f 100644 --- a/lib/sg_cmds_extra.c +++ b/lib/sg_cmds_extra.c @@ -83,10 +83,6 @@ #define READ_MEDIA_SERIAL_NUM_SA 0x1 #define REPORT_IDENTIFYING_INFORMATION_SA 0x5 #define REPORT_TGT_PRT_GRP_SA 0xa -#define RECEIVE_COPY_RES_COPY_STATUS_SA 0x00 -#define RECEIVE_COPY_RES_RECEIVE_DATA_SA 0x01 -#define RECEIVE_COPY_RES_OPERATING_PARMS_SA 0x03 -#define RECEIVE_COPY_RES_FAILED_SEGMENT_DETAILS_SA 0x04 #define SET_IDENTIFYING_INFORMATION_SA 0x6 #define SET_TGT_PRT_GRP_SA 0xa #define WRITE_LONG_16_SA 0x11 @@ -2385,23 +2381,22 @@ sg_ll_3party_copy_out(int sg_fd, int sa, unsigned int list_id, int group_num, {EXTENDED_COPY_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; unsigned char sense_b[SENSE_BUFF_LEN]; struct sg_pt_base * ptvp; - const char * opcode_name = "bad sa"; + char cname[80]; if (NULL == sg_warnings_strm) sg_warnings_strm = stderr; + sg_get_opcode_sa_name(EXTENDED_COPY_CMD, sa, 0, sizeof(cname), cname); + xcopyCmdBlk[1] = (unsigned char)(sa & 0x1f); switch (sa) { - case 0x0: - case 0x1: - opcode_name = (0x0 == sa) ? "Extended copy (LID1)" : - "Extended copy (LID4)"; + case 0x0: /* XCOPY(LID1) */ + case 0x1: /* XCOPY(LID4) */ xcopyCmdBlk[10] = (unsigned char)((param_len >> 24) & 0xff); xcopyCmdBlk[11] = (unsigned char)((param_len >> 16) & 0xff); xcopyCmdBlk[12] = (unsigned char)((param_len >> 8) & 0xff); xcopyCmdBlk[13] = (unsigned char)(param_len & 0xff); break; - case 0x10: - case 0x11: - opcode_name = (0x10 == sa) ? "Populate token" : "Write using token"; + case 0x10: /* POPULATE TOKEN (SBC-3) */ + case 0x11: /* WRITE USING TOKEN (SBC-3) */ xcopyCmdBlk[6] = (unsigned char)((list_id >> 24) & 0xff); xcopyCmdBlk[7] = (unsigned char)((list_id >> 16) & 0xff); xcopyCmdBlk[8] = (unsigned char)((list_id >> 8) & 0xff); @@ -2412,8 +2407,7 @@ sg_ll_3party_copy_out(int sg_fd, int sa, unsigned int list_id, int group_num, xcopyCmdBlk[13] = (unsigned char)(param_len & 0xff); xcopyCmdBlk[14] = (unsigned char)(group_num & 0x1f); break; - case 0x1c: - opcode_name = "Copy operation abort"; + case 0x1c: /* COPY OPERATION ABORT */ xcopyCmdBlk[2] = (unsigned char)((list_id >> 24) & 0xff); xcopyCmdBlk[3] = (unsigned char)((list_id >> 16) & 0xff); xcopyCmdBlk[4] = (unsigned char)((list_id >> 8) & 0xff); @@ -2427,28 +2421,27 @@ sg_ll_3party_copy_out(int sg_fd, int sa, unsigned int list_id, int group_num, tmout = (timeout_secs > 0) ? timeout_secs : DEF_PT_TIMEOUT; if (verbose) { - fprintf(sg_warnings_strm, " %s cmd: ", opcode_name); + fprintf(sg_warnings_strm, " %s cmd: ", cname); for (k = 0; k < EXTENDED_COPY_CMDLEN; ++k) fprintf(sg_warnings_strm, "%02x ", xcopyCmdBlk[k]); fprintf(sg_warnings_strm, "\n"); if ((verbose > 1) && paramp && param_len) { - fprintf(sg_warnings_strm, " %s parameter list:\n", - opcode_name); + fprintf(sg_warnings_strm, " %s parameter list:\n", cname); dStrHexErr((const char *)paramp, param_len, -1); } } ptvp = construct_scsi_pt_obj(); if (NULL == ptvp) { - fprintf(sg_warnings_strm, "%s: out of memory\n", opcode_name); + fprintf(sg_warnings_strm, "%s: out of memory\n", cname); return -1; } set_scsi_pt_cdb(ptvp, xcopyCmdBlk, sizeof(xcopyCmdBlk)); set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); set_scsi_pt_data_out(ptvp, (unsigned char *)paramp, param_len); res = do_scsi_pt(ptvp, sg_fd, tmout, verbose); - ret = sg_cmds_process_resp(ptvp, opcode_name, res, 0, sense_b, - noisy, verbose, &sense_cat); + ret = sg_cmds_process_resp(ptvp, cname, res, 0, sense_b, noisy, verbose, + &sense_cat); if (-1 == ret) ; else if (-2 == ret) { |