aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2013-07-30 23:58:53 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2013-07-30 23:58:53 +0000
commit88732e65ad3158fb372c2077ea47ba3016f5cb17 (patch)
tree24fe93526ed6846754d9cb39350573d65d95dc6a /src
parent736d019894943c1ba75b6f9051a7e40ee8f061c8 (diff)
downloadsg3_utils-88732e65ad3158fb372c2077ea47ba3016f5cb17.tar.gz
sg_lib: add dStrHexErr() and dStrHexStr(); sg_xcopy work (and in sg_cmds_extra.c)
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@503 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src')
-rw-r--r--src/sg_compare_and_write.c2
-rw-r--r--src/sg_copy_results.c40
-rw-r--r--src/sg_format.c7
-rw-r--r--src/sg_get_config.c8
-rw-r--r--src/sg_inq.c92
-rw-r--r--src/sg_logs.c39
-rw-r--r--src/sg_luns.c6
-rw-r--r--src/sg_persist.c4
-rw-r--r--src/sg_raw.c2
-rw-r--r--src/sg_requests.c6
-rw-r--r--src/sg_rtpg.c2
-rw-r--r--src/sg_sanitize.c4
-rw-r--r--src/sg_ses.c8
-rw-r--r--src/sg_stpg.c10
-rw-r--r--src/sg_vpd.c150
-rw-r--r--src/sg_write_buffer.c6
-rw-r--r--src/sg_write_same.c9
-rw-r--r--src/sg_xcopy.c109
18 files changed, 285 insertions, 219 deletions
diff --git a/src/sg_compare_and_write.c b/src/sg_compare_and_write.c
index 627031c9..f97ca4bf 100644
--- a/src/sg_compare_and_write.c
+++ b/src/sg_compare_and_write.c
@@ -343,7 +343,7 @@ sg_compare_and_write(int sg_fd, unsigned char * buff, int blocks,
}
if ((verbose > 2) && (xfer_len > 0)) {
fprintf(stderr, " Data-out buffer contents:\n");
- dStrHex((const char *)buff, xfer_len, 1);
+ dStrHexErr((const char *)buff, xfer_len, 1);
}
res = do_scsi_pt(ptvp, sg_fd, DEF_TIMEOUT_SECS, verbose);
ret = sg_cmds_process_resp(ptvp, "COMPARE AND WRITE", res, 0,
diff --git a/src/sg_copy_results.c b/src/sg_copy_results.c
index 20c32815..1bb4f25a 100644
--- a/src/sg_copy_results.c
+++ b/src/sg_copy_results.c
@@ -34,7 +34,7 @@
and the optional list identifier passed as the list_id argument.
*/
-static const char * version_str = "1.2 20130627";
+static const char * version_str = "1.4 20130730";
#define MAX_XFER_LEN 10000
@@ -286,6 +286,14 @@ usage()
);
}
+static const char * rec_copy_name_arr[] = {
+ "Receive copy status(LID1)",
+ "Receive copy data(LID1)",
+ "Receive copy [0x2]",
+ "Receive copy operating parameters",
+ "Receive copy failure details(LID1)",
+};
+
int
main(int argc, char * argv[])
{
@@ -296,6 +304,7 @@ main(int argc, char * argv[])
int list_id = 0;
int do_hex = 0;
int verbose = 0;
+ const char * cp;
const char * device_name = NULL;
char file_name[256];
int ret = 1;
@@ -394,46 +403,41 @@ main(int argc, char * argv[])
return SG_LIB_FILE_ERROR;
}
+ cp = (const char *)&rec_copy_name_arr[sa];
if (verbose)
- fprintf(stderr, ME "issue receive copy results to device %s\n"
- "\t\txfer_len= %d (0x%x), sa=%d, list_id=%d\n",
- device_name, xfer_len, xfer_len, sa, list_id);
+ fprintf(stderr, ME "issue %s to device %s\n\t\txfer_len= %d (0x%x), "
+ "list_id=%d\n", cp, device_name, xfer_len, xfer_len,
+ list_id);
/* In SPC-4 opcode 0x84, service actions have command names:
* 0x0 RECEIVE COPY STATUS(LID1)
* 0x1 RECEIVE COPY DATA(LID1)
* 0x3 RECEIVE COPY OPERATING PARAMETERS
* 0x4 RECEIVE COPY FAILURE DETAILS(LID1)
- */
+ */
res = sg_ll_receive_copy_results(sg_fd, sa, list_id, cpResultBuff,
- xfer_len, 0, verbose);
+ xfer_len, 1, verbose);
ret = res;
switch (res) {
case 0:
break;
case SG_LIB_CAT_NOT_READY:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS failed, "
- "device not ready\n");
+ fprintf(stderr, " SCSI %s failed, device not ready\n", cp);
break;
case SG_LIB_CAT_UNIT_ATTENTION:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS failed, "
- "unit attention\n");
+ fprintf(stderr, " SCSI %s failed, unit attention\n", cp);
break;
case SG_LIB_CAT_ABORTED_COMMAND:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS failed, "
- "aborted command\n");
+ fprintf(stderr, " SCSI %s failed, aborted command\n", cp);
break;
case SG_LIB_CAT_INVALID_OP:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS command not "
- "supported\n");
+ fprintf(stderr, " SCSI %s command not supported\n", cp);
break;
case SG_LIB_CAT_ILLEGAL_REQ:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS failed, "
- "bad field in cdb\n");
+ fprintf(stderr, " SCSI %s failed, bad field in cdb\n", cp);
break;
default:
- fprintf(stderr, " SCSI RECEIVE COPY RESULTS command error %d\n",
- res);
+ fprintf(stderr, " SCSI %s command error %d\n", cp, res);
break;
}
if (res != 0)
diff --git a/src/sg_format.c b/src/sg_format.c
index 77f6f81a..0ef19b1e 100644
--- a/src/sg_format.c
+++ b/src/sg_format.c
@@ -47,7 +47,7 @@
#include "sg_cmds_basic.h"
#include "sg_cmds_extra.h"
-static const char * version_str = "1.23 20130530";
+static const char * version_str = "1.23 20130730";
#define RW_ERROR_RECOVERY_PAGE 1 /* every disk should have one */
#define FORMAT_DEV_PAGE 3 /* Format Device Mode Page [now obsolete] */
@@ -276,7 +276,8 @@ scsi_format(int fd, int fmtpinfo, int cmplst, int pf_usage, int immed,
resp_len = reqSense[7] + 8;
if (verb) {
fprintf(stderr, "Parameter data in hex:\n");
- dStrHex((const char *)reqSense, resp_len, 1);
+ dStrHexErr((const char *)reqSense, resp_len,
+ 1);
}
progress = -1;
sg_get_sense_progress_fld(reqSense, resp_len,
@@ -318,7 +319,7 @@ scsi_format(int fd, int fmtpinfo, int cmplst, int pf_usage, int immed,
resp_len = requestSenseBuff[7] + 8;
if (verbose > 1) {
fprintf(stderr, "Parameter data in hex\n");
- dStrHex((const char *)requestSenseBuff, resp_len, 1);
+ dStrHexErr((const char *)requestSenseBuff, resp_len, 1);
}
progress = -1;
sg_get_sense_progress_fld(requestSenseBuff, resp_len,
diff --git a/src/sg_get_config.c b/src/sg_get_config.c
index 801c095c..0d0ebbd4 100644
--- a/src/sg_get_config.c
+++ b/src/sg_get_config.c
@@ -873,10 +873,10 @@ decode_feature(int feature, unsigned char * ucp, int len)
}
break;
default:
- printf(" Unknown feature [0x%x], version=%d persist=%d, "
- "current=%d\n", feature, ((ucp[2] >> 2) & 0xf),
- !!(ucp[2] & 0x2), !!(ucp[2] & 0x1));
- dStrHex((const char *)ucp, len, 1);
+ fprintf(stderr, " Unknown feature [0x%x], version=%d persist=%d, "
+ "current=%d\n", feature, ((ucp[2] >> 2) & 0xf),
+ !!(ucp[2] & 0x2), !!(ucp[2] & 0x1));
+ dStrHexErr((const char *)ucp, len, 1);
break;
}
}
diff --git a/src/sg_inq.c b/src/sg_inq.c
index 69fdb6f8..62d480e8 100644
--- a/src/sg_inq.c
+++ b/src/sg_inq.c
@@ -1201,8 +1201,10 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
}
if (k)
printf(" vendor specific: %.*s\n", i_len, ip);
- else
+ else {
+ printf(" vendor specific:\n");
dStrHex((const char *)ip, i_len, -1);
+ }
break;
case 1: /* T10 vendor identification */
printf(" vendor id: %.8s\n", ip);
@@ -1221,7 +1223,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
printf(" EUI-64 based %d byte identifier\n", i_len);
if (1 != c_set) {
fprintf(stderr, " << expected binary code_set (1)>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
ci_off = 0;
@@ -1237,7 +1239,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
} else if ((8 != i_len) && (12 != i_len)) {
fprintf(stderr, " << can only decode 8, 12 and 16 "
"byte ids>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
c_id = ((ip[ci_off] << 16) | (ip[ci_off + 1] << 8) |
@@ -1264,20 +1266,20 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
case 3: /* NAA */
if (1 != c_set) {
fprintf(stderr, " << expected binary code_set (1)>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
naa = (ip[0] >> 4) & 0xff;
if ((naa < 2) || (naa > 6) || (4 == naa)) {
fprintf(stderr, " << unexpected naa [0x%x]>>\n", naa);
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
if (2 == naa) { /* NAA IEEE Extended */
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 2 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
d_id = (((ip[0] & 0xf) << 8) | ip[1]);
@@ -1295,7 +1297,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 3 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
printf(" NAA 3, Locally assigned:\n");
@@ -1307,7 +1309,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 5 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) |
@@ -1328,7 +1330,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if (16 != i_len) {
fprintf(stderr, " << unexpected NAA 6 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) |
@@ -1359,7 +1361,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1369,7 +1371,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1379,7 +1381,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if ((1 != c_set) || (0 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association, length 4>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1389,7 +1391,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
if ((1 != c_set) || (0 != assoc)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
printf(" MD5 logical unit identifier:\n");
@@ -1398,7 +1400,7 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
case 8: /* SCSI name string */
if (3 != c_set) {
fprintf(stderr, " << expected UTF-8 code_set>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
printf(" SCSI name string:\n");
@@ -1430,7 +1432,8 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
sg_get_trans_proto_str(p_id, sizeof(b), b));
break;
default: /* reserved */
- dStrHex((const char *)ip, i_len, -1);
+ fprintf(stderr, " reserved designator=0x%x\n", desig_type);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
}
@@ -1442,7 +1445,7 @@ static void
export_dev_ids(unsigned char * buff, int len)
{
int u, j, m, id_len, c_set, assoc, desig_type, i_len;
- int off, d_id, naa, k;
+ int off, d_id, naa, k, p_id;
unsigned char * ucp;
unsigned char * ip;
const char * assoc_str;
@@ -1455,6 +1458,7 @@ export_dev_ids(unsigned char * buff, int len)
ip = buff;
c_set = 1;
assoc = 0;
+ p_id = 0xf;
desig_type = 3;
j = 1;
off = 16;
@@ -1474,6 +1478,7 @@ export_dev_ids(unsigned char * buff, int len)
return;
}
ip = ucp + 4;
+ p_id = ((ucp[0] >> 4) & 0xf); /* protocol identifier */
c_set = (ucp[0] & 0xf);
assoc = ((ucp[1] >> 4) & 0x3);
desig_type = (ucp[1] & 0xf);
@@ -1517,7 +1522,7 @@ export_dev_ids(unsigned char * buff, int len)
case 2: /* EUI-64 based */
if (1 != c_set) {
fprintf(stderr, " << expected binary code_set (1)>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("SCSI_IDENT_%s_EUI64=", assoc_str);
@@ -1528,20 +1533,20 @@ export_dev_ids(unsigned char * buff, int len)
case 3: /* NAA */
if (1 != c_set) {
fprintf(stderr, " << expected binary code_set (1)>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
naa = (ip[0] >> 4) & 0xff;
if ((naa < 2) || (naa > 6) || (4 == naa)) {
fprintf(stderr, " << unexpected naa [0x%x]>>\n", naa);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
if (6 != naa) {
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 2 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("SCSI_IDENT_%s_NAA=", assoc_str);
@@ -1552,7 +1557,7 @@ export_dev_ids(unsigned char * buff, int len)
if (16 != i_len) {
fprintf(stderr, " << unexpected NAA 6 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("SCSI_IDENT_%s_NAA=", assoc_str);
@@ -1565,7 +1570,7 @@ export_dev_ids(unsigned char * buff, int len)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1575,7 +1580,7 @@ export_dev_ids(unsigned char * buff, int len)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1585,7 +1590,7 @@ export_dev_ids(unsigned char * buff, int len)
if ((1 != c_set) || (0 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1595,7 +1600,7 @@ export_dev_ids(unsigned char * buff, int len)
if ((1 != c_set) || (0 != assoc)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("SCSI_IDENT_%s_MD5=", assoc_str);
@@ -1604,16 +1609,41 @@ export_dev_ids(unsigned char * buff, int len)
case 8: /* SCSI name string */
if (3 != c_set) {
fprintf(stderr, " << expected UTF-8 code_set>>\n");
- dStrHex((const char *)ip, i_len, -1);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
printf("SCSI_IDENT_%s_NAME=%.*s\n", assoc_str, i_len,
(const char *)ip);
break;
- case 9: /* PCIe Routing ID */
- /* new in spc4r34, looks under-specified, drop through now */
+ case 9: /* Protocol specific port identifier */
+ if (TPROTO_UAS == p_id) {
+ if ((4 != i_len) || (1 != assoc)) {
+ fprintf(stderr, " << UAS (USB) expected target "
+ "port association>>\n");
+ dStrHexErr((const char *)ip, i_len, 0);
+ break;
+ }
+ printf("SCSI_IDENT_%s_UAS_DEVICE_ADDRESS=0x%x\n", assoc_str,
+ ip[0] & 0x7f);
+ printf("SCSI_IDENT_%s_UAS_INTERFACE_NUMBER=0x%x\n", assoc_str,
+ ip[2]);
+ } else if (TPROTO_SOP == p_id) {
+ if ((4 != i_len) && (8 != i_len)) { /* spc4r36h confused */
+ fprintf(stderr, " << SOP (PCIe) descriptor "
+ "length=%d >>\n", i_len);
+ dStrHexErr((const char *)ip, i_len, 0);
+ break;
+ }
+ printf("SCSI_IDENT_%s_SOP_ROUTING_ID=0x%x\n", assoc_str,
+ ((ip[0] << 8) | ip[1]));
+ } else {
+ fprintf(stderr, " << Protocol specific port identifier "
+ "protocol_id=0x%x>>\n", p_id);
+ }
+ break;
default: /* reserved */
- dStrHex((const char *)ip, i_len, -1);
+ fprintf(stderr, " reserved designator=0x%x\n", desig_type);
+ dStrHexErr((const char *)ip, i_len, -1);
break;
}
}
@@ -1737,13 +1767,13 @@ decode_transport_id(const char * leadin, unsigned char * ucp, int len)
break;
case TPROTO_NONE:
fprintf(stderr, "%s No specified protocol\n", leadin);
- /* dStrHex((const char *)ucp, ((len > 24) ? 24 : len), 0); */
+ /* dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), 0); */
bump = 24;
break;
default:
fprintf(stderr, "%s unknown protocol id=0x%x "
"format_code=%d\n", leadin, proto_id, format_code);
- dStrHex((const char *)ucp, ((len > 24) ? 24 : len), 0);
+ dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), 0);
bump = 24;
break;
}
diff --git a/src/sg_logs.c b/src/sg_logs.c
index fa95c279..47fac5b2 100644
--- a/src/sg_logs.c
+++ b/src/sg_logs.c
@@ -25,7 +25,7 @@
#include "sg_lib.h"
#include "sg_cmds_basic.h"
-static const char * version_str = "1.13 20130701"; /* spc4r35 + sbc3r30 */
+static const char * version_str = "1.14 20130730"; /* spc4r35 + sbc3r30 */
#define MX_ALLOC_LEN (0xfffc)
#define SHORT_RESP_LEN 128
@@ -629,7 +629,7 @@ do_logs(int sg_fd, unsigned char * resp, int mx_resp_len,
actual_len = (resp[2] << 8) + resp[3] + 4;
if ((0 == optsp->do_raw) && (vb > 1)) {
fprintf(stderr, " Log sense (find length) response:\n");
- dStrHex((const char *)resp, LOG_SENSE_PROBE_ALLOC_LEN, 1);
+ dStrHexErr((const char *)resp, LOG_SENSE_PROBE_ALLOC_LEN, 1);
fprintf(stderr, " hence calculated response length=%d\n",
actual_len);
}
@@ -667,7 +667,7 @@ do_logs(int sg_fd, unsigned char * resp, int mx_resp_len,
}
if ((0 == optsp->do_raw) && (vb > 1)) {
fprintf(stderr, " Log sense response:\n");
- dStrHex((const char *)resp, actual_len, 1);
+ dStrHexErr((const char *)resp, actual_len, 1);
}
return 0;
}
@@ -1191,7 +1191,8 @@ show_tape_usage_log_page(unsigned char * resp, int len, int show_pcb)
printf(" Total fatal suspended reads: %u", n);
break;
default:
- printf(" unknown parameter code = 0x%x, contents in hex:\n", pc);
+ printf(" unknown parameter code = 0x%x, contents in "
+ "hex:\n", pc);
dStrHex((const char *)ucp, extra, 1);
break;
}
@@ -1240,7 +1241,8 @@ show_tape_capacity_log_page(unsigned char * resp, int len, int show_pcb)
printf(" Alternate partition maximum capacity (in MiB): %u", n);
break;
default:
- printf(" unknown parameter code = 0x%x, contents in hex:\n", pc);
+ printf(" unknown parameter code = 0x%x, contents in "
+ "hex:\n", pc);
dStrHex((const char *)ucp, extra, 1);
break;
}
@@ -1325,7 +1327,8 @@ show_data_compression_log_page(unsigned char * resp, int len, int show_pcb)
printf(" Data compression enabled: 0x%" PRIx64, n);
break;
default:
- printf(" unknown parameter code = 0x%x, contents in hex:\n", pc);
+ printf(" unknown parameter code = 0x%x, contents in "
+ "hex:\n", pc);
dStrHex((const char *)ucp, extra, 1);
break;
}
@@ -1526,7 +1529,8 @@ show_temperature_page(unsigned char * resp, int len, int show_pcb, int hdr,
}
} else if (show_unknown) {
- printf(" unknown parameter code = 0x%x, contents in hex:\n", pc);
+ printf(" unknown parameter code = 0x%x, contents in "
+ "hex:\n", pc);
dStrHex((const char *)ucp, extra, 1);
} else
continue;
@@ -1568,9 +1572,9 @@ show_start_stop_page(unsigned char * resp, int len, int show_pcb, int verbose)
printf(" Date of manufacture, year: %.4s, week: %.2s",
&ucp[4], &ucp[8]);
else if (verbose) {
- printf(" Date of manufacture parameter length "
- "strange: %d\n", extra - 4);
- dStrHex((const char *)ucp, extra, 1);
+ fprintf(stderr, " Date of manufacture parameter length "
+ "strange: %d\n", extra - 4);
+ dStrHexErr((const char *)ucp, extra, 1);
}
break;
case 2:
@@ -1578,9 +1582,9 @@ show_start_stop_page(unsigned char * resp, int len, int show_pcb, int verbose)
printf(" Accounting date, year: %.4s, week: %.2s",
&ucp[4], &ucp[8]);
else if (verbose) {
- printf(" Accounting date parameter length strange: %d\n",
- extra - 4);
- dStrHex((const char *)ucp, extra, 1);
+ fprintf(stderr, " Accounting date parameter length "
+ "strange: %d\n", extra - 4);
+ dStrHexErr((const char *)ucp, extra, 1);
}
break;
case 3:
@@ -1624,7 +1628,8 @@ show_start_stop_page(unsigned char * resp, int len, int show_pcb, int verbose)
}
break;
default:
- printf(" unknown parameter code = 0x%x, contents in hex:\n", pc);
+ printf(" unknown parameter code = 0x%x, contents in "
+ "hex:\n", pc);
dStrHex((const char *)ucp, extra, 1);
break;
}
@@ -2263,7 +2268,7 @@ show_stats_perform_page(unsigned char * resp, int len,
fprintf(stderr, "show_performance... unknown parameter "
"code %d\n", param_code);
if (optsp->do_verbose)
- dStrHex((const char *)ucp, extra, 1);
+ dStrHexErr((const char *)ucp, extra, 1);
break;
}
if ((optsp->do_pcb) && (0 == optsp->do_name)) {
@@ -2386,7 +2391,7 @@ show_stats_perform_page(unsigned char * resp, int len,
fprintf(stderr, "show_performance... unknown parameter "
"code %d\n", param_code);
if (optsp->do_verbose)
- dStrHex((const char *)ucp, extra, 1);
+ dStrHexErr((const char *)ucp, extra, 1);
break;
}
if ((optsp->do_pcb) && (0 == optsp->do_name)) {
@@ -2521,7 +2526,7 @@ show_cache_stats_page(unsigned char * resp, int len,
fprintf(stderr, "show_performance... unknown parameter "
"code %d\n", pc);
if (optsp->do_verbose)
- dStrHex((const char *)ucp, extra, 1);
+ dStrHexErr((const char *)ucp, extra, 1);
break;
}
if ((optsp->do_pcb) && (0 == optsp->do_name)) {
diff --git a/src/sg_luns.c b/src/sg_luns.c
index 060b9acd..33e4f222 100644
--- a/src/sg_luns.c
+++ b/src/sg_luns.c
@@ -28,7 +28,7 @@
* and decodes the response.
*/
-static const char * version_str = "1.22 20130528";
+static const char * version_str = "1.23 20130730";
#define MAX_RLUNS_BUFF_LEN (1024 * 1024)
#define DEF_RLUNS_BUFF_LEN (1024 * 8)
@@ -575,8 +575,8 @@ main(int argc, char * argv[])
}
if (verbose > 1) {
fprintf(stderr, "\nOutput response in hex\n");
- dStrHex((const char *)reportLunsBuff,
- (trunc ? maxlen : list_len + 8), 1);
+ dStrHexErr((const char *)reportLunsBuff,
+ (trunc ? maxlen : list_len + 8), 1);
}
for (k = 0, off = 8; k < luns; ++k, off += 8) {
if (0 == do_quiet) {
diff --git a/src/sg_persist.c b/src/sg_persist.c
index a4e00225..6a983f8f 100644
--- a/src/sg_persist.c
+++ b/src/sg_persist.c
@@ -306,12 +306,12 @@ decode_transport_id(const char * leadin, unsigned char * ucp, int len,
break;
case TPROTO_NONE:
fprintf(stderr, "%s No specified protocol\n", leadin);
- /* dStrHex((const char *)ucp, ((len > 24) ? 24 : len), -1); */
+ /* dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), -1); */
break;
default:
fprintf(stderr, "%s unknown protocol id=0x%x "
"format_code=%d\n", leadin, proto_id, format_code);
- dStrHex((const char *)ucp, ((len > 24) ? 24 : len), -1);
+ dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), -1);
break;
}
}
diff --git a/src/sg_raw.c b/src/sg_raw.c
index 9f78146d..3d41c282 100644
--- a/src/sg_raw.c
+++ b/src/sg_raw.c
@@ -517,7 +517,7 @@ main(int argc, char *argv[])
} else {
if (opts.datain_file == NULL && !opts.datain_binary) {
fprintf(stderr, "Received %d bytes of data:\n", data_len);
- dStrHex((const char *)dxfer_buffer_in, data_len, 0);
+ dStrHexErr((const char *)dxfer_buffer_in, data_len, 0);
} else {
const char * cp = "stdout";
diff --git a/src/sg_requests.c b/src/sg_requests.c
index f6865ef1..c45dba36 100644
--- a/src/sg_requests.c
+++ b/src/sg_requests.c
@@ -25,7 +25,7 @@
* This program issues the SCSI command REQUEST SENSE to the given SCSI device.
*/
-static const char * version_str = "1.23 20130530";
+static const char * version_str = "1.24 20130730";
#define MAX_REQS_RESP_LEN 255
#define DEF_REQS_RESP_LEN 252
@@ -242,7 +242,7 @@ main(int argc, char * argv[])
resp_len = requestSenseBuff[7] + 8;
if (verbose > 1) {
fprintf(stderr, "Parameter data in hex\n");
- dStrHex((const char *)requestSenseBuff, resp_len, 1);
+ dStrHexErr((const char *)requestSenseBuff, resp_len, 1);
}
progress = -1;
sg_get_sense_progress_fld(requestSenseBuff, resp_len,
@@ -288,7 +288,7 @@ main(int argc, char * argv[])
sg_print_sense(NULL, requestSenseBuff, resp_len, 0);
if (verbose > 1) {
fprintf(stderr, "\nParameter data in hex\n");
- dStrHex((const char *)requestSenseBuff, resp_len, 1);
+ dStrHexErr((const char *)requestSenseBuff, resp_len, 1);
}
}
continue;
diff --git a/src/sg_rtpg.c b/src/sg_rtpg.c
index f4fbcbd7..c13b2310 100644
--- a/src/sg_rtpg.c
+++ b/src/sg_rtpg.c
@@ -239,7 +239,7 @@ int main(int argc, char * argv[])
printf("Report list length = %d\n", report_len);
if (hex) {
if (verbose)
- fprintf(stderr, "\nOutput response in hex:\n");
+ printf("\nOutput response in hex:\n");
dStrHex((const char *)reportTgtGrpBuff, report_len, 1);
goto err_out;
}
diff --git a/src/sg_sanitize.c b/src/sg_sanitize.c
index 68f03aa5..3c7c7b1b 100644
--- a/src/sg_sanitize.c
+++ b/src/sg_sanitize.c
@@ -184,7 +184,7 @@ do_sanitize(int sg_fd, const struct opts_t * op, const void * param_lstp,
}
if ((op->verbose > 2) && (param_lst_len > 0)) {
fprintf(stderr, " Parameter list contents:\n");
- dStrHex((const char *)param_lstp, param_lst_len, 1);
+ dStrHexErr((const char *)param_lstp, param_lst_len, 1);
}
ptvp = construct_scsi_pt_obj();
if (NULL == ptvp) {
@@ -538,7 +538,7 @@ main(int argc, char * argv[])
resp_len = requestSenseBuff[7] + 8;
if (vb > 2) {
fprintf(stderr, "Parameter data in hex\n");
- dStrHex((const char *)requestSenseBuff, resp_len, 1);
+ dStrHexErr((const char *)requestSenseBuff, resp_len, 1);
}
progress = -1;
sg_get_sense_progress_fld(requestSenseBuff, resp_len,
diff --git a/src/sg_ses.c b/src/sg_ses.c
index 91ffb8cb..5ead459c 100644
--- a/src/sg_ses.c
+++ b/src/sg_ses.c
@@ -27,7 +27,7 @@
* commands tailored for SES (enclosure) devices.
*/
-static const char * version_str = "1.71 20130507"; /* ses3r05 */
+static const char * version_str = "1.72 20130730"; /* ses3r05 */
#define MX_ALLOC_LEN ((64 * 1024) - 1)
#define MX_ELEM_HDR 1024
@@ -89,7 +89,7 @@ static const char * version_str = "1.71 20130507"; /* ses3r05 */
struct element_type_t {
int elem_type_code;
- const char * abbrev;
+ const char * abbrev;
const char * desc;
};
@@ -1103,14 +1103,14 @@ do_rec_diag(int sg_fd, int page_code, unsigned char * rsp_buff,
if ((0x9 == rsp_buff[0]) && (1 & rsp_buff[1])) {
fprintf(stderr, "Enclosure busy, try again later\n");
if (op->do_hex)
- dStrHex((const char *)rsp_buff, rsp_len, 0);
+ dStrHexErr((const char *)rsp_buff, rsp_len, 0);
} else if (0x8 == rsp_buff[0]) {
fprintf(stderr, "Enclosure only supports Short Enclosure "
"Status: 0x%x\n", rsp_buff[1]);
} else {
fprintf(stderr, "Invalid response, wanted page code: 0x%x "
"but got 0x%x\n", page_code, rsp_buff[0]);
- dStrHex((const char *)rsp_buff, rsp_len, 0);
+ dStrHexErr((const char *)rsp_buff, rsp_len, 0);
}
return -2;
}
diff --git a/src/sg_stpg.c b/src/sg_stpg.c
index 8b89c0b9..6ee5aebb 100644
--- a/src/sg_stpg.c
+++ b/src/sg_stpg.c
@@ -24,7 +24,7 @@
* to the given SCSI device.
*/
-static const char * version_str = "1.6 20130507";
+static const char * version_str = "1.7 20130730";
#define TGT_GRP_BUFF_LEN 1024
#define MX_ALLOC_LEN (0xc000 + 0x80)
@@ -161,7 +161,7 @@ decode_target_port(unsigned char * buff, int len, int *d_id, int *d_tpg)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
*d_id = ((ip[2] << 8) | ip[3]);
@@ -170,7 +170,7 @@ decode_target_port(unsigned char * buff, int len, int *d_id, int *d_tpg)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
*d_tpg = ((ip[2] << 8) | ip[3]);
@@ -572,7 +572,7 @@ main(int argc, char * argv[])
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -617,7 +617,7 @@ main(int argc, char * argv[])
printf("Report list length = %d\n", report_len);
if (hex) {
if (verbose)
- fprintf(stderr, "\nOutput response in hex:\n");
+ printf("\nOutput response in hex:\n");
dStrHex((const char *)reportTgtGrpBuff, report_len, 1);
goto err_out;
}
diff --git a/src/sg_vpd.c b/src/sg_vpd.c
index dfa596a9..4a5cd502 100644
--- a/src/sg_vpd.c
+++ b/src/sg_vpd.c
@@ -30,7 +30,7 @@
*/
-static const char * version_str = "0.68 20130715"; /* spc4r36 + sbc3r35 */
+static const char * version_str = "0.69 20130730"; /* spc4r36 + sbc3r35 */
/* And with sbc3r35, vale Mark Evans */
extern void svpd_enumerate_vendor(void);
@@ -650,20 +650,20 @@ decode_dev_ids_quiet(unsigned char * buff, int len, int m_assoc,
if (1 != c_set) {
fprintf(stderr, " << unexpected code set %d for "
"NAA>>\n", c_set);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
naa = (ip[0] >> 4) & 0xff;
if ((naa < 2) || (naa > 6) || (4 == naa)) {
fprintf(stderr, " << unexpected NAA [0x%x]>>\n", naa);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
if (2 == naa) { /* NAA IEEE extended */
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 2 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("0x");
@@ -675,7 +675,7 @@ decode_dev_ids_quiet(unsigned char * buff, int len, int m_assoc,
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 3 or 5 "
"identifier length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
if ((0 == is_sas) || (1 != assoc)) {
@@ -702,7 +702,7 @@ decode_dev_ids_quiet(unsigned char * buff, int len, int m_assoc,
if (16 != i_len) {
fprintf(stderr, " << unexpected NAA 6 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf("0x");
@@ -733,7 +733,7 @@ decode_dev_ids_quiet(unsigned char * buff, int len, int m_assoc,
case 8: /* SCSI name string */
if (3 != c_set) {
fprintf(stderr, " << expected UTF-8 code_set>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
/* does %s print out UTF-8 ok??
@@ -792,8 +792,10 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
}
if (k)
printf(" vendor specific: %.*s\n", i_len, ip);
- else
- dStrHex((const char *)ip, i_len, 0);
+ else {
+ fprintf(stderr, " vendor specific:\n");
+ dStrHexErr((const char *)ip, i_len, 0);
+ }
break;
case 1: /* T10 vendor identification */
printf(" vendor id: %.8s\n", ip);
@@ -813,7 +815,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if ((8 != i_len) && (12 != i_len) && (16 != i_len)) {
fprintf(stderr, " << expect 8, 12 and 16 byte "
"EUI, got %d>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf(" 0x");
@@ -825,7 +827,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
printf(" EUI-64 based %d byte identifier\n", i_len);
if (1 != c_set) {
fprintf(stderr, " << expected binary code_set (1)>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
ci_off = 0;
@@ -841,7 +843,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
} else if ((8 != i_len) && (12 != i_len)) {
fprintf(stderr, " << can only decode 8, 12 and 16 "
"byte ids>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
c_id = ((ip[ci_off] << 16) | (ip[ci_off + 1] << 8) |
@@ -865,20 +867,20 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if (1 != c_set) {
fprintf(stderr, " << unexpected code set %d for "
"NAA>>\n", c_set);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
naa = (ip[0] >> 4) & 0xff;
if (! ((2 == naa) || (5 == naa) || (6 == naa))) {
fprintf(stderr, " << unexpected NAA [0x%x]>>\n", naa);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
if (2 == naa) {
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 2 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = (((ip[0] & 0xf) << 8) | ip[1]);
@@ -902,7 +904,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 5 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) |
@@ -930,7 +932,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if (16 != i_len) {
fprintf(stderr, " << unexpected NAA 6 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) |
@@ -968,7 +970,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -978,7 +980,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -988,7 +990,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
if ((1 != c_set) || (0 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -996,9 +998,9 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
break;
case 7: /* MD5 logical unit identifier */
if ((1 != c_set) || (0 != assoc)) {
- printf(" << expected binary code_set, logical "
+ fprintf(stderr, " << expected binary code_set, logical "
"unit association>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf(" MD5 logical unit identifier:\n");
@@ -1007,7 +1009,7 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
case 8: /* SCSI name string */
if (3 != c_set) {
fprintf(stderr, " << expected UTF-8 code_set>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf(" SCSI name string:\n");
@@ -1033,13 +1035,14 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
printf(" [or device number: 0x%x, function number: "
"0x%x]\n", (0x1f & (ip[1] >> 3)), 0x7 & ip[1]);
} else
- printf(" >>>> unexpected protocol indentifier: %s\n"
+ fprintf(stderr, " >>>> unexpected protocol indentifier: %s\n"
" with Protocol specific port "
"identifier\n",
sg_get_trans_proto_str(p_id, sizeof(b), b));
break;
default: /* reserved */
- dStrHex((const char *)ip, i_len, 0);
+ fprintf(stderr, " reserved designator=0x%x\n", desig_type);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
}
@@ -1163,8 +1166,9 @@ decode_transport_id(const char * leadin, unsigned char * ucp, int len)
else if (1 == format_code)
printf("world wide unique port id: %.*s\n", num, &ucp[4]);
else {
- printf(" [Unexpected format code: %d]\n", format_code);
- dStrHex((const char *)ucp, num + 4, 0);
+ fprintf(stderr, " [Unexpected format code: %d]\n",
+ format_code);
+ dStrHexErr((const char *)ucp, num + 4, 0);
}
bump = (((num + 4) < 24) ? 24 : num + 4);
break;
@@ -1205,20 +1209,21 @@ decode_transport_id(const char * leadin, unsigned char * ucp, int len)
if (0 == format_code)
printf("Routing ID: 0x%x\n", num);
else {
- printf(" [Unexpected format code: %d]\n", format_code);
- dStrHex((const char *)ucp, 24, 0);
+ fprintf(stderr, " [Unexpected format code: %d]\n",
+ format_code);
+ dStrHexErr((const char *)ucp, 24, 0);
}
bump = 24;
break;
case TPROTO_NONE:
fprintf(stderr, "%s No specified protocol\n", leadin);
- /* dStrHex((const char *)ucp, ((len > 24) ? 24 : len), 0); */
+ /* dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), 0); */
bump = 24;
break;
default:
fprintf(stderr, "%s unknown protocol id=0x%x "
"format_code=%d\n", leadin, proto_id, format_code);
- dStrHex((const char *)ucp, ((len > 24) ? 24 : len), 0);
+ dStrHexErr((const char *)ucp, ((len > 24) ? 24 : len), 0);
bump = 24;
break;
}
@@ -1535,7 +1540,7 @@ decode_proto_lu_vpd(unsigned char * buff, int len, int do_hex)
break;
default:
fprintf(stderr, "Unexpected proto=%d\n", proto);
- dStrHex((const char *)ucp, bump, 1);
+ dStrHexErr((const char *)ucp, bump, 1);
break;
}
}
@@ -1590,7 +1595,7 @@ decode_proto_port_vpd(unsigned char * buff, int len, int do_hex)
break;
default:
fprintf(stderr, "Unexpected proto=%d\n", proto);
- dStrHex((const char *)ucp, bump, 1);
+ dStrHexErr((const char *)ucp, bump, 1);
break;
}
}
@@ -1669,19 +1674,31 @@ decode_b0_vpd(unsigned char * buff, int len, int do_hex, int pdt)
break;
case 0x11:
default:
- printf(" Unable to decode pdt=0x%x, in hex:\n", pdt);
- dStrHex((const char *)buff, len, 0);
+ fprintf(stderr, " Unable to decode pdt=0x%x, in hex:\n", pdt);
+ dStrHexErr((const char *)buff, len, 0);
break;
}
}
+static const char * product_type_arr[] =
+{
+ "Not specified",
+ "CFast",
+ "CompactFlash",
+ "MemoryStick",
+ "MultiMediaCard",
+ "Secure Digital Card (SD)",
+ "XQD",
+ "Universal Flash Storage Card (UFS)",
+};
+
/* VPD_BLOCK_DEV_CHARS sbc */
/* VPD_MAN_ASS_SN ssc */
/* VPD_SECURITY_TOKEN osd */
static void
decode_b1_vpd(unsigned char * buff, int len, int do_hex, int pdt)
{
- unsigned int u;
+ unsigned int u, k;
if (do_hex) {
dStrHex((const char *)buff, len, 0);
@@ -1703,7 +1720,14 @@ decode_b1_vpd(unsigned char * buff, int len, int do_hex, int pdt)
printf(" Reserved [0x%x]\n", u);
else
printf(" Nominal rotation rate: %d rpm\n", u);
- printf(" Product type=%d\n", buff[6]);
+ u = buff[6];
+ k = sizeof(product_type_arr) / sizeof(product_type_arr[0]);
+ if (u < k)
+ printf(" Product type: %s\n", product_type_arr[u]);
+ else if (u < 0xf0)
+ printf(" Product type: Reserved [0x%x]\n", u);
+ else
+ printf(" Product type: Vendor specific [0x%x]\n", u);
printf(" WABEREQ=%d\n", (buff[7] >> 6) & 0x3);
printf(" WACEREQ=%d\n", (buff[7] >> 4) & 0x3);
u = buff[7] & 0xf;
@@ -1739,8 +1763,8 @@ decode_b1_vpd(unsigned char * buff, int len, int do_hex, int pdt)
len - 4, buff + 4);
break;
default:
- printf(" Unable to decode pdt=0x%x, in hex:\n", pdt);
- dStrHex((const char *)buff, len, 0);
+ fprintf(stderr, " Unable to decode pdt=0x%x, in hex:\n", pdt);
+ dStrHexErr((const char *)buff, len, 0);
break;
}
}
@@ -1852,8 +1876,8 @@ decode_b2_vpd(unsigned char * buff, int len, int do_hex, int pdt)
decode_tapealert_supported_vpd(buff, len);
break;
default:
- printf(" Unable to decode pdt=0x%x, in hex:\n", pdt);
- dStrHex((const char *)buff, len, 0);
+ fprintf(stderr, " Unable to decode pdt=0x%x, in hex:\n", pdt);
+ dStrHexErr((const char *)buff, len, 0);
break;
}
}
@@ -1891,8 +1915,8 @@ decode_b3_vpd(unsigned char * b, int len, int do_hex, int pdt)
printf(" Automation device serial number: %s\n", obuff);
break;
default:
- printf(" Unable to decode pdt=0x%x, in hex:\n", pdt);
- dStrHex((const char *)b, len, 0);
+ fprintf(stderr, " Unable to decode pdt=0x%x, in hex:\n", pdt);
+ dStrHexErr((const char *)b, len, 0);
break;
}
}
@@ -1929,7 +1953,7 @@ svpd_unable_to_decode(int sg_fd, int num_vpd, int subvalue, int maxlen,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2015,7 +2039,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2075,7 +2099,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2126,7 +2150,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2172,7 +2196,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2216,7 +2240,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2255,7 +2279,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2308,7 +2332,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2352,7 +2376,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2397,7 +2421,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2444,7 +2468,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2488,7 +2512,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2532,7 +2556,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2575,7 +2599,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2619,7 +2643,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2679,7 +2703,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2744,7 +2768,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2801,7 +2825,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2859,7 +2883,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
@@ -2904,7 +2928,7 @@ svpd_decode_t10(int sg_fd, int num_vpd, int subvalue, int maxlen, int do_hex,
"INQUIRY response\n");
if (verbose) {
fprintf(stderr, "First 32 bytes of bad response\n");
- dStrHex((const char *)rsp_buff, 32, 0);
+ dStrHexErr((const char *)rsp_buff, 32, 0);
}
return SG_LIB_CAT_MALFORMED;
}
diff --git a/src/sg_write_buffer.c b/src/sg_write_buffer.c
index b72ffc7a..d8ac38e6 100644
--- a/src/sg_write_buffer.c
+++ b/src/sg_write_buffer.c
@@ -25,7 +25,7 @@
* This utility issues the SCSI WRITE BUFFER command to the given device.
*/
-static const char * version_str = "1.10 20130507"; /* spc4r32 */
+static const char * version_str = "1.10 20130730"; /* spc4r32 */
#define ME "sg_write_buffer: "
#define DEF_XFER_LEN (8 * 1024 * 1024)
@@ -184,8 +184,8 @@ sg_ll_write_buffer_v2(int sg_fd, int mode, int m_specific, int buffer_id,
if ((verbose > 1) && paramp && param_len) {
fprintf(sg_warnings_strm, " Write buffer parameter list%s:\n",
((param_len > 256) ? " (first 256 bytes)" : ""));
- dStrHex((const char *)paramp,
- ((param_len > 256) ? 256 : param_len), -1);
+ dStrHexErr((const char *)paramp,
+ ((param_len > 256) ? 256 : param_len), -1);
}
}
diff --git a/src/sg_write_same.c b/src/sg_write_same.c
index 09e2f5d4..3dd235e9 100644
--- a/src/sg_write_same.c
+++ b/src/sg_write_same.c
@@ -26,7 +26,7 @@
#include "sg_cmds_basic.h"
#include "sg_cmds_extra.h"
-static const char * version_str = "1.03 20130603";
+static const char * version_str = "1.04 20130730";
#define ME "sg_write_same: "
@@ -256,7 +256,7 @@ do_write_same(int sg_fd, const struct opts_t * optsp, const void * dataoutp,
}
if ((optsp->verbose > 3) && (optsp->xfer_len > 0)) {
fprintf(stderr, " Data-out buffer contents:\n");
- dStrHex((const char *)dataoutp, optsp->xfer_len, 1);
+ dStrHexErr((const char *)dataoutp, optsp->xfer_len, 1);
}
ptvp = construct_scsi_pt_obj();
if (NULL == ptvp) {
@@ -509,7 +509,7 @@ main(int argc, char * argv[])
RCAP16_RESP_LEN, 0, (vb ? (vb - 1): 0));
if (0 == res) {
if (vb > 3)
- dStrHex((const char *)resp_buff, RCAP16_RESP_LEN, 1);
+ dStrHexErr((const char *)resp_buff, RCAP16_RESP_LEN, 1);
block_size = ((resp_buff[8] << 24) |
(resp_buff[9] << 16) |
(resp_buff[10] << 8) |
@@ -528,7 +528,8 @@ main(int argc, char * argv[])
(vb ? (vb - 1): 0));
if (0 == res) {
if (vb > 3)
- dStrHex((const char *)resp_buff, RCAP10_RESP_LEN, 1);
+ dStrHexErr((const char *)resp_buff, RCAP10_RESP_LEN,
+ 1);
block_size = ((resp_buff[4] << 24) |
(resp_buff[5] << 16) |
(resp_buff[6] << 8) |
diff --git a/src/sg_xcopy.c b/src/sg_xcopy.c
index 6ffddf8d..c6eedc04 100644
--- a/src/sg_xcopy.c
+++ b/src/sg_xcopy.c
@@ -61,12 +61,10 @@
#include "sg_cmds_extra.h"
#include "sg_io_linux.h"
-static const char * version_str = "0.36 20130627";
+static const char * version_str = "0.37 20130730";
#define ME "sg_xcopy: "
-#define SG_DEBUG
-
#define STR_SZ 1024
#define INOUTF_SZ 512
#define EBUFF_SZ 512
@@ -561,7 +559,7 @@ scsi_extended_copy(int sg_fd, unsigned char list_id,
int seg_desc_len;
int verb;
- verb = (verbose ? verbose - 1: 0);
+ verb = verbose ? (verbose - 1) : 0;
memset(xcopyBuff, 0, 256);
xcopyBuff[0] = list_id;
@@ -580,7 +578,7 @@ scsi_extended_copy(int sg_fd, unsigned char list_id,
if (verbose > 3) {
fprintf(stderr, "\nParameter list in hex (length %d):\n",
desc_offset);
- dStrHex((const char *)xcopyBuff, desc_offset, 1);
+ dStrHexErr((const char *)xcopyBuff, desc_offset, 1);
}
/* set noisy so if a UA happens it will be printed to stderr */
return sg_ll_extended_copy(sg_fd, xcopyBuff, desc_offset, 1, verb);
@@ -657,7 +655,7 @@ scsi_operating_parameter(struct xcopy_fp_t *xfp, int is_target)
}
if (verbose > 2) {
fprintf(stderr, "\nOutput response in hex:\n");
- dStrHex((const char *)rcBuff, len, 1);
+ dStrHexErr((const char *)rcBuff, len, 1);
}
max_target_num = rcBuff[8] << 8 | rcBuff[9];
max_segment_num = rcBuff[10] << 8 | rcBuff[11];
@@ -948,8 +946,10 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
}
if (k)
printf(" vendor specific: %.*s\n", i_len, ip);
- else
- dStrHex((const char *)ip, i_len, 0);
+ else {
+ fprintf(stderr, " vendor specific:\n");
+ dStrHexErr((const char *)ip, i_len, 0);
+ }
break;
case 1: /* T10 vendor identification */
printf(" vendor id: %.8s\n", ip);
@@ -960,7 +960,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if ((8 != i_len) && (12 != i_len) && (16 != i_len)) {
fprintf(stderr, " << expect 8, 12 and 16 byte "
"EUI, got %d>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf(" 0x");
@@ -972,13 +972,13 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if (1 != c_set) {
fprintf(stderr, " << unexpected code set %d for "
"NAA>>\n", c_set);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
naa = (ip[0] >> 4) & 0xff;
if (! ((2 == naa) || (5 == naa) || (6 == naa))) {
fprintf(stderr, " << unexpected NAA [0x%x]>>\n", naa);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
if ((5 == naa) && (0x10 == i_len)) {
@@ -991,7 +991,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 2 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = (((ip[0] & 0xf) << 8) | ip[1]);
@@ -1005,7 +1005,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if (8 != i_len) {
fprintf(stderr, " << unexpected NAA 5 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
/* c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) | */
@@ -1023,7 +1023,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if (16 != i_len) {
fprintf(stderr, " << unexpected NAA 6 identifier "
"length: 0x%x>>\n", i_len);
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
/* c_id = (((ip[0] & 0xf) << 20) | (ip[1] << 12) | */
@@ -1043,7 +1043,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1053,7 +1053,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if ((1 != c_set) || (1 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, target "
"port association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1063,7 +1063,7 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
if ((1 != c_set) || (0 != assoc) || (4 != i_len)) {
fprintf(stderr, " << expected binary code_set, logical "
"unit association, length 4>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
d_id = ((ip[2] << 8) | ip[3]);
@@ -1071,18 +1071,18 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
break;
case 7: /* MD5 logical unit identifier */
if ((1 != c_set) || (0 != assoc)) {
- printf(" << expected binary code_set, logical "
+ fprintf(stderr, " << expected binary code_set, logical "
"unit association>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
- printf(" MD5 logical unit identifier:\n");
- dStrHex((const char *)ip, i_len, 0);
+ fprintf(stderr, " MD5 logical unit identifier:\n");
+ dStrHexErr((const char *)ip, i_len, 0);
break;
case 8: /* SCSI name string */
if (3 != c_set) {
fprintf(stderr, " << expected UTF-8 code_set>>\n");
- dStrHex((const char *)ip, i_len, 0);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
printf(" SCSI name string:\n");
@@ -1093,7 +1093,8 @@ decode_designation_descriptor(const unsigned char * ucp, int i_len)
printf(" %s\n", (const char *)ip);
break;
default: /* reserved */
- dStrHex((const char *)ip, i_len, 0);
+ fprintf(stderr, " reserved designator=0x%x\n", desig_type);
+ dStrHexErr((const char *)ip, i_len, 0);
break;
}
}
@@ -1127,7 +1128,7 @@ desc_from_vpd_id(int sg_fd, unsigned char *desc, int desc_len,
}
if (verbose > 2) {
fprintf(stderr, "Output response in hex:\n");
- dStrHex((const char *)rcBuff, len, 1);
+ dStrHexErr((const char *)rcBuff, len, 1);
}
while ((u = sg_vpd_dev_id_iter(rcBuff + 4, len - 4, &off, 0, -1, -1)) ==
@@ -1187,7 +1188,7 @@ desc_from_vpd_id(int sg_fd, unsigned char *desc, int desc_len,
desc[31] = block_size & 0xff;
if (verbose > 3) {
fprintf(stderr, "Descriptor in hex (bs %d):\n", block_size);
- dStrHex((const char *)desc, 32, 1);
+ dStrHexErr((const char *)desc, 32, 1);
}
return 32;
}
@@ -1597,11 +1598,10 @@ main(int argc, char * argv[])
}
}
-#ifdef SG_DEBUG
- fprintf(stderr, ME "%s if=%s skip=%" PRId64 " of=%s seek=%" PRId64
- " count=%" PRId64 "\n", (on_src)?"on-source":"on-destination",
- ixcf.fname, skip, oxcf.fname, seek, dd_count);
-#endif
+ if (verbose > 1)
+ fprintf(stderr, ME "%s if=%s skip=%" PRId64 " of=%s seek=%" PRId64
+ " count=%" PRId64 "\n", (on_src)?"on-source":"on-destination",
+ ixcf.fname, skip, oxcf.fname, seek, dd_count);
install_handler(SIGINT, interrupt_handler);
install_handler(SIGQUIT, interrupt_handler);
install_handler(SIGPIPE, interrupt_handler);
@@ -1730,17 +1730,15 @@ main(int argc, char * argv[])
res = scsi_operating_parameter(&ixcf, 0);
} else {
if (-res == SG_LIB_CAT_INVALID_OP) {
- fprintf(stderr, "receive copy results not supported on %s\n",
- ixcf.fname);
-#ifndef SG_DEBUG
+ fprintf(stderr, "receive copy operating parameters not "
+ "supported on %s\n", ixcf.fname);
return EINVAL;
-#endif
} else if (-res == SG_LIB_CAT_NOT_READY)
- fprintf(stderr, "receive copy results failed on %s - not "
- "ready\n", ixcf.fname);
+ fprintf(stderr, "receive copy operating parameters failed "
+ "on %s - not ready\n", ixcf.fname);
else {
- fprintf(stderr, "Unable to receive copy results on %s\n",
- ixcf.fname);
+ fprintf(stderr, "Unable to receive copy operating "
+ "parameters on %s\n", ixcf.fname);
return -res;
}
}
@@ -1768,17 +1766,15 @@ main(int argc, char * argv[])
res = scsi_operating_parameter(&oxcf, 1);
} else {
if (-res == SG_LIB_CAT_INVALID_OP) {
- fprintf(stderr, "receive copy results not supported on %s\n",
- oxcf.fname);
-#ifndef SG_DEBUG
+ fprintf(stderr, "receive copy operating parameters not "
+ "supported on %s\n", oxcf.fname);
return EINVAL;
-#endif
} else if (-res == SG_LIB_CAT_NOT_READY)
- fprintf(stderr, "receive copy results failed on %s - not "
- "ready\n", oxcf.fname);
+ fprintf(stderr, "receive copy operating parameters failed "
+ "on %s - not ready\n", oxcf.fname);
else {
- fprintf(stderr, "Unable to receive copy results on %s\n",
- oxcf.fname);
+ fprintf(stderr, "Unable to receive copy operating "
+ "parameters on %s\n", oxcf.fname);
return -res;
}
}
@@ -1831,10 +1827,14 @@ main(int argc, char * argv[])
}
}
} else {
+ unsigned long r;
+
if (xcopy_flag_dc)
- bpt = oxcf.max_bytes / oxcf.sect_sz;
+ r = oxcf.max_bytes / (unsigned long)oxcf.sect_sz;
else
- bpt = ixcf.max_bytes / ixcf.sect_sz;
+ r = ixcf.max_bytes / (unsigned long)ixcf.sect_sz;
+ if (r > INT_MAX)
+ bpt = INT_MAX / 2;
}
seg_desc_type = seg_desc_from_dd_type(ixcf.sg_type, 0, oxcf.sg_type, 0);
@@ -1846,13 +1846,14 @@ main(int argc, char * argv[])
start_tm_valid = 1;
}
-#ifdef SG_DEBUG
- fprintf(stderr,
- "Start of loop, count=%" PRId64 ", bpt=%d, "
- "lba_in=%" PRId64 ", lba_out=%" PRId64 "\n",
- dd_count, bpt, skip, seek);
-#endif
+ if (verbose)
+ fprintf(stderr,
+ "Start of loop, count=%" PRId64 ", bpt=%d, "
+ "lba_in=%" PRId64 ", lba_out=%" PRId64 "\n",
+ dd_count, bpt, skip, seek);
+
xcopy_fd = (on_src) ? infd : outfd;
+
while (dd_count > 0) {
if (dd_count > bpt)
blocks = bpt;