aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2022-09-05 05:23:31 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2022-09-05 05:23:31 +0000
commiteda37108f2a83c7944b1c0f63162647eddc9960d (patch)
treefd5990953d5dd017796554ff5d0c7efd407e64fa /src
parent7e7308a2dbdec4c900b0805ad94324d3a288a163 (diff)
downloadsg3_utils-eda37108f2a83c7944b1c0f63162647eddc9960d.tar.gz
sg_inq+sg_vpd: ongoing updates; rescan_scsi_bus.sh
https://github.com/doug-gilbert/sg3_utils/pull/21 change to rescan_scsi_bus.sh was applied in an earlier commit but not noted. git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@970 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src')
-rw-r--r--src/sg_dd.c14
-rw-r--r--src/sg_inq.c118
-rw-r--r--src/sg_prevent.c8
-rw-r--r--src/sg_vpd.c74
-rw-r--r--src/sg_vpd_common.c20
5 files changed, 140 insertions, 94 deletions
diff --git a/src/sg_dd.c b/src/sg_dd.c
index 8392f31d..e099c335 100644
--- a/src/sg_dd.c
+++ b/src/sg_dd.c
@@ -70,7 +70,7 @@
#include "sg_unaligned.h"
#include "sg_pr2serr.h"
-static const char * version_str = "6.34 20220729";
+static const char * version_str = "6.35 20220826";
#define ME "sg_dd: "
@@ -214,16 +214,16 @@ static void calc_duration_throughput(bool contin);
static void
-install_handler(int sig_num, void (*sig_handler) (int sig))
+install_handler(int sig_num, void (*sig_handler)(int sig))
{
struct sigaction sigact;
- sigaction (sig_num, NULL, &sigact);
- if (sigact.sa_handler != SIG_IGN)
- {
+
+ sigaction(sig_num, NULL, &sigact);
+ if (sigact.sa_handler != SIG_IGN) {
sigact.sa_handler = sig_handler;
- sigemptyset (&sigact.sa_mask);
+ sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
- sigaction (sig_num, &sigact, NULL);
+ sigaction(sig_num, &sigact, NULL);
}
}
diff --git a/src/sg_inq.c b/src/sg_inq.c
index 47834743..edd571c7 100644
--- a/src/sg_inq.c
+++ b/src/sg_inq.c
@@ -53,7 +53,7 @@
#include "sg_vpd_common.h" /* for shared VPD page processing with sg_vpd */
-static const char * version_str = "2.28 20220818"; /* spc6r06, sbc5r03 */
+static const char * version_str = "2.30 20220904"; /* spc6r06, sbc5r03 */
#define MY_NAME "sg_inq"
@@ -1071,6 +1071,7 @@ svpd_inhex_decode_all(struct opts_t * op, sgj_opaque_p jop)
int bump, off;
int in_len = op->maxlen;
int prev_pn = -1;
+ sgj_state * jsp = &op->json_st;
uint8_t vpd0_buff[512];
uint8_t * rp = vpd0_buff;
@@ -1105,12 +1106,17 @@ svpd_inhex_decode_all(struct opts_t * op, sgj_opaque_p jop)
"max_pn=0x%x\n", __func__, pn, max_pn);
continue;
}
- if (op->do_long)
- printf("[0x%x] ", pn);
+ if (op->do_long) {
+ if (jsp->pr_as_json)
+ sgj_pr_hr(jsp, "[0x%x]:\n", pn);
+ else
+ sgj_pr_hr(jsp, "[0x%x] ", pn);
+ }
res = vpd_decode(-1, op, jop, off);
if (SG_LIB_CAT_OTHER == res) {
- ; // xxxxx
+ if (op->verbose)
+ pr2serr("Can't decode VPD page=0x%x\n", pn);
}
}
return res;
@@ -1204,6 +1210,7 @@ decode_ascii_inf(uint8_t * buff, int len, struct opts_t * op)
int al, k, bump;
uint8_t * bp;
uint8_t * p;
+ sgj_state * jsp = &op->json_st;
if (op->do_hex) {
hex2stdout(buff, len, no_ascii_4hex(op));
@@ -1221,15 +1228,15 @@ decode_ascii_inf(uint8_t * buff, int len, struct opts_t * op)
for (k = 0, bp = buff + 5; k < al; k += bump, bp += bump) {
p = (uint8_t *)memchr(bp, 0, al - k);
if (! p) {
- printf(" %.*s\n", al - k, (const char *)bp);
+ sgj_pr_hr(jsp, " %.*s\n", al - k, (const char *)bp);
break;
}
- printf(" %s\n", (const char *)bp);
+ sgj_pr_hr(jsp, " %s\n", (const char *)bp);
bump = (p - bp) + 1;
}
bp = buff + 5 + al;
if (bp < (buff + len)) {
- printf("Vendor specific information in hex:\n");
+ sgj_pr_hr(jsp, "Vendor specific information in hex:\n");
hex2stdout(bp, len - (al + 5), 0);
}
}
@@ -1688,6 +1695,8 @@ decode_dev_ids(const char * leadin, uint8_t * buff, int len,
pr2serr("%s VPD page error: around offset=%d\n", leadin, off);
}
+/* The --export and --json options are assumed to be mutually exclusive.
+ * Here the former takes precedence. */
static void
export_dev_ids(uint8_t * buff, int len, int verbose)
{
@@ -2128,9 +2137,15 @@ static const char * failover_mode_arr[] =
};
static void
-decode_upr_vpd_c0_emc(uint8_t * buff, int len, struct opts_t * op)
+decode_upr_vpd_c0_emc(uint8_t * buff, int len, struct opts_t * op,
+ sgj_opaque_p jop)
{
- int k, ip_mgmt, vpp80, lun_z;
+ uint8_t uc;
+ int k, n, ip_mgmt, vpp80, lun_z;
+ sgj_state * jsp = &op->json_st;
+ const char * cp;
+ char b[256];
+ static const int blen = sizeof(b);
if (len < 3) {
pr2serr("EMC upr VPD page [0xc0]: length too short=%d\n", len);
@@ -2145,50 +2160,64 @@ decode_upr_vpd_c0_emc(uint8_t * buff, int len, struct opts_t * op)
buff[9]);
return;
}
- printf(" LUN WWN: ");
- for (k = 0; k < 16; ++k)
- printf("%02x", buff[10 + k]);
- printf("\n");
- printf(" Array Serial Number: ");
- dStrRaw((const char *)&buff[50], buff[49]);
- printf("\n");
+ for (k = 0, n = 0; k < 16; ++k)
+ n += sg_scnpr(b + n, blen - n, "%02x", buff[10 + k]);
+ sgj_haj_vs(jsp, jop, 2, "LUN WWN", SGJ_SEP_COLON_1_SPACE, b);
+ snprintf(b, blen, "%.*s", buff[49], buff + 50);
+ sgj_haj_vs(jsp, jop, 2, "Array Serial Number", SGJ_SEP_COLON_1_SPACE, b);
- printf(" LUN State: ");
if (buff[4] > 0x02)
- printf("Unknown (%x)\n", buff[4]);
+ snprintf(b, blen, "Unknown (%x)", buff[4]);
else
- printf("%s\n", lun_state_arr[buff[4]]);
-
- printf(" This path connects to: ");
- if (buff[8] > 0x01)
- printf("Unknown SP (%x)", buff[8]);
+ snprintf(b, blen, "%s", lun_state_arr[buff[4]]);
+ sgj_haj_vistr(jsp, jop, 2, "LUN State", SGJ_SEP_COLON_1_SPACE,
+ buff[4], true, b);
+
+ uc = buff[8];
+ n = 0;
+ if (uc > 0x01)
+ n += sg_scnpr(b + n, blen - n, "Unknown SP (%x)", uc);
else
- printf("%s", sp_arr[buff[8]]);
- printf(", Port Number: %u\n", buff[7]);
+ n += sg_scnpr(b + n, blen - n, "%s", sp_arr[uc]);
+ sgj_js_nv_ihexstr(jsp, jop, "path_connects_to", uc, NULL, b);
+ n += sg_scnpr(b + n, blen - n, ", Port Number: %u", buff[7]);
+ sgj_pr_hr(jsp, " This path connects to: %s\n", b);
+ sgj_js_nv_ihex(jsp, jop, "port_number", buff[7]);
- printf(" Default Owner: ");
if (buff[5] > 0x01)
- printf("Unknown (%x)\n", buff[5]);
+ snprintf(b, blen, "Unknown (%x)\n", buff[5]);
else
- printf("%s\n", sp_arr[buff[5]]);
+ snprintf(b, blen, "%s\n", sp_arr[buff[5]]);
+ sgj_haj_vistr(jsp, jop, 2, "Default owner", SGJ_SEP_COLON_1_SPACE,
+ buff[5], true, b);
- printf(" NO_ATF: %s, Access Logix: %s\n",
- buff[6] & 0x80 ? "set" : "not set",
- buff[6] & 0x40 ? "supported" : "not supported");
+ cp = (buff[6] & 0x40) ? "supported" : "not supported";
+ sgj_pr_hr(jsp, " NO_ATF: %s, Access Logix: %s\n",
+ buff[6] & 0x80 ? "set" : "not set", cp);
+ sgj_js_nv_i(jsp, jop, "no_atf", !! (buff[6] & 0x80));
+ sgj_js_nv_istr(jsp, jop, "access_logix", !! (buff[6] & 0x40),
+ NULL, cp);
ip_mgmt = (buff[6] >> 4) & 0x3;
-
- printf(" SP IP Management Mode: %s\n", ip_mgmt_arr[ip_mgmt]);
- if (ip_mgmt == 2)
- printf(" SP IPv4 address: %u.%u.%u.%u\n",
- buff[44], buff[45], buff[46], buff[47]);
- else {
+ cp = ip_mgmt_arr[ip_mgmt];
+ sgj_pr_hr(jsp, " SP IP Management Mode: %s\n", cp);
+ sgj_js_nv_istr(jsp, jop, "sp_ip_management_mode", !! ip_mgmt,
+ NULL, cp);
+ if (ip_mgmt == 2) {
+ snprintf(b, blen, "%u.%u.%u.%u", buff[44], buff[45], buff[46],
+ buff[47]);
+ sgj_pr_hr(jsp, " SP IPv4 address: %s\n", b);
+ sgj_js_nv_s(jsp, jop, "sp_ipv4_address", b);
+ } else if (ip_mgmt == 3) {
printf(" SP IPv6 address: ");
+ n = 0;
for (k = 0; k < 16; ++k)
- printf("%02x", buff[32 + k]);
- printf("\n");
+ n += sg_scnpr(b + n, blen - n, "%02x", buff[32 + k]);
+ sgj_pr_hr(jsp, " SP IPv6 address: %s\n", b);
+ sgj_js_nv_hex_bytes(jsp, jop, "sp_ipv6_address", buff + 32, 16);
}
+// yyyyyyy more conversion work needed below this point
vpp80 = buff[30] & 0x08;
lun_z = buff[30] & 0x04;
@@ -3811,15 +3840,20 @@ vpd_decode(int sg_fd, struct opts_t * op, sgj_opaque_p jop, int off)
break;
/* Vendor specific VPD pages (>= 0xc0) */
case VPD_UPR_EMC: /* 0xc0 */
+ np = "Block device characteristics VPD page";
+ ep = "(EMC)";
if (!op->do_raw && (op->do_hex < 3))
- printf("VPD INQUIRY: Unit Path Report Page (EMC)\n");
+ sgj_pr_hr(jsp, "VPD INQUIRY: %s %s\n", np, ep);
res = vpd_fetch_page(sg_fd, rp, pn, -1, qt, vb, &len);
if (res)
break;
if (op->do_raw)
dStrRaw((const char *)rp, len);
- else
- decode_upr_vpd_c0_emc(rp, len, op);
+ else {
+ if (as_json)
+ jo2p = sg_vpd_js_hdr(jsp, jop, np, rp);
+ decode_upr_vpd_c0_emc(rp, len, op, jo2p);
+ }
break;
case VPD_RDAC_VERS: /* 0xc2 */
if (!op->do_raw && (op->do_hex < 3))
diff --git a/src/sg_prevent.c b/src/sg_prevent.c
index 487315ac..b2076c54 100644
--- a/src/sg_prevent.c
+++ b/src/sg_prevent.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004-2018 Douglas Gilbert.
+ * Copyright (c) 2004-2022 Douglas Gilbert.
* All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the BSD_LICENSE file.
@@ -29,7 +29,7 @@
* given SCSI device.
*/
-static const char * version_str = "1.12 20180627";
+static const char * version_str = "1.13 20220826";
#define ME "sg_prevent: "
@@ -94,8 +94,8 @@ main(int argc, char * argv[])
usage();
return 0;
case 'p':
- prevent = sg_get_num(optarg);
- if ((prevent < 0) || (prevent > 3)) {
+ prevent = sg_get_num(optarg);
+ if ((prevent < 0) || (prevent > 3)) {
pr2serr("bad argument to '--prevent'\n");
return SG_LIB_SYNTAX_ERROR;
}
diff --git a/src/sg_vpd.c b/src/sg_vpd.c
index 9aae8a72..707d3e12 100644
--- a/src/sg_vpd.c
+++ b/src/sg_vpd.c
@@ -42,7 +42,7 @@
*/
-static const char * version_str = "1.81 20220818"; /* spc6r06 + sbc5r03 */
+static const char * version_str = "1.82 20220826"; /* spc6r06 + sbc5r03 */
#define MY_NAME "sg_vpd"
@@ -290,9 +290,9 @@ static int
count_standard_vpds(int vpd_pn)
{
const struct svpd_values_name_t * vnp;
- int matches;
+ int matches = 0;
- for (vnp = standard_vpd_pg, matches = 0; vnp->acron; ++vnp) {
+ for (vnp = standard_vpd_pg; vnp->acron; ++vnp) {
if ((vpd_pn == vnp->value) && vnp->name) {
if (0 == matches)
printf("Matching standard VPD pages:\n");
@@ -1374,10 +1374,10 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
else {
bool protect = false;
- op->protect_not_sure = false;
- if (op->std_inq_a_valid)
- protect = !! (0x1 & op->std_inq_a[5]);
- else if ((sg_fd >= 0) && (! op->do_force)) {
+ op->protect_not_sure = false;
+ if (op->std_inq_a_valid)
+ protect = !! (0x1 & op->std_inq_a[5]);
+ else if ((sg_fd >= 0) && (! op->do_force)) {
struct sg_simple_inquiry_resp sir;
res = sg_simple_inquiry(sg_fd, &sir, false, vb);
@@ -1385,11 +1385,11 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
if (op->verbose)
pr2serr("%s: sg_simple_inquiry() failed, "
"res=%d\n", __func__, res);
- op->protect_not_sure = true;
+ op->protect_not_sure = true;
} else
protect = !!(sir.byte_5 & 0x1); /* SPC-3 and later */
} else
- op->protect_not_sure = true;
+ op->protect_not_sure = true;
if (vb || long_notquiet)
sgj_pr_hr(jsp," [PQual=%d Peripheral device type: "
"%s]\n", pqual, pdt_str);
@@ -1650,7 +1650,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
if (0 == res) {
if (! allow_name && allow_if_found)
- printf("%s%s\n", pre, np);
+ sgj_pr_hr(jsp, "%s%s\n", pre, np);
if (op->do_raw)
dStrRaw(rp, len);
else {
@@ -1719,7 +1719,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb0\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb0\n", pre);
break;
case 0xb1: /* depends on pdt */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1770,7 +1770,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb1\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb1\n", pre);
break;
case 0xb2: /* VPD page depends on pdt */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1815,7 +1815,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb2\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb2\n", pre);
break;
case 0xb3: /* VPD page depends on pdt */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1857,7 +1857,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb3\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb3\n", pre);
break;
case 0xb4: /* VPD page depends on pdt */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1902,7 +1902,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb4\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb4\n", pre);
break;
case 0xb5: /* VPD page depends on pdt */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1951,7 +1951,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb5\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb5\n", pre);
break;
case VPD_ZBC_DEV_CHARS: /* 0xb6 for both pdt=0 and pdt=0x14 */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -1989,7 +1989,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb6\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb6\n", pre);
break;
case 0xb7:
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -2027,7 +2027,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb7\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb7\n", pre);
break;
case 0xb8: /* VPD_FORMAT_PRESETS */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -2068,7 +2068,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb8\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb8\n", pre);
break;
case 0xb9: /* VPD_CON_POS_RANGE */
res = vpd_fetch_page(sg_fd, rp, pn, op->maxlen, qt, vb, &len);
@@ -2109,7 +2109,7 @@ svpd_decode_t10(int sg_fd, struct opts_t * op, sgj_opaque_p jop,
return 0;
} else if ((! op->do_raw) && (! op->do_quiet) && (op->do_hex < 3) &&
exam_not_given)
- printf("%sVPD page=0xb8\n", pre);
+ sgj_pr_hr(jsp, "%sVPD page=0xb8\n", pre);
break;
default:
return SG_LIB_CAT_OTHER;
@@ -2123,6 +2123,7 @@ svpd_decode_all(int sg_fd, struct opts_t * op, sgj_opaque_p jop)
int k, res, rlen, n, pn;
int max_pn = 255;
int any_err = 0;
+ sgj_state * jsp = &op->json_st;
uint8_t vpd0_buff[512];
uint8_t * rp = vpd0_buff;
@@ -2158,9 +2159,13 @@ svpd_decode_all(int sg_fd, struct opts_t * op, sgj_opaque_p jop)
continue;
op->vpd_pn = pn;
if (k > 0)
- printf("\n");
- if (op->do_long)
- printf("[0x%x] ", pn);
+ sgj_pr_hr(jsp, "\n");
+ if (op->do_long) {
+ if (jsp->pr_as_json)
+ sgj_pr_hr(jsp, "[0x%x]:\n", pn);
+ else
+ printf("[0x%x] ", pn);
+ }
res = svpd_decode_t10(sg_fd, op, jop, 0, 0, NULL);
if (SG_LIB_CAT_OTHER == res) {
@@ -2215,8 +2220,12 @@ svpd_decode_all(int sg_fd, struct opts_t * op, sgj_opaque_p jop)
"max_pn=0x%x\n", __func__, pn, max_pn);
continue;
}
- if (op->do_long)
- printf("[0x%x] ", pn);
+ if (op->do_long) {
+ if (jsp->pr_as_json)
+ sgj_pr_hr(jsp, "[0x%x]:\n", pn);
+ else
+ printf("[0x%x] ", pn);
+ }
res = svpd_decode_t10(-1, op, jop, 0, off, NULL);
if (SG_LIB_CAT_OTHER == res) {
@@ -2237,6 +2246,7 @@ svpd_examine_all(int sg_fd, struct opts_t * op, sgj_opaque_p jop)
int k, res, start;
int max_pn;
int any_err = 0;
+ sgj_state * jsp = &op->json_st;
char b[80];
max_pn = (op->page_given ? op->vpd_pn : 0xff);
@@ -2261,7 +2271,7 @@ svpd_examine_all(int sg_fd, struct opts_t * op, sgj_opaque_p jop)
if (first)
first = false;
else if (got_one) {
- printf("\n");
+ sgj_pr_hr(jsp, "\n");
got_one = false;
}
if (op->do_long)
@@ -2455,6 +2465,7 @@ main(int argc, char * argv[])
return 0;
}
+ jsp = &op->json_st;
if (op->do_enum) {
if (op->device_name)
pr2serr("Device name %s ignored when --enumerate given\n",
@@ -2498,16 +2509,15 @@ main(int argc, char * argv[])
matches = svpd_count_vendor_vpds(op->vpd_pn,
op->vend_prod_num);
if (0 == matches)
- printf("No matches found for VPD page number 0x%x\n",
- op->vpd_pn);
+ sgj_pr_hr(jsp, "No matches found for VPD page number 0x%x\n",
+ op->vpd_pn);
} else { /* enumerate standard then vendor VPD pages */
- printf("Standard VPD pages:\n");
+ sgj_pr_hr(jsp, "Standard VPD pages:\n");
enumerate_vpds(1, 1);
}
return 0;
}
- jsp = &op->json_st;
as_json = jsp->pr_as_json;
if (as_json)
jop = sgj_start_r(MY_NAME, version_str, argc, argv, jsp);
@@ -2524,7 +2534,7 @@ main(int argc, char * argv[])
vnp = sdp_find_vpd_by_acron("sinq");
} else {
pr2serr("abbreviation doesn't match a VPD page\n");
- printf("Available standard VPD pages:\n");
+ sgj_pr_hr(jsp, "Available standard VPD pages:\n");
enumerate_vpds(1, 1);
ret = SG_LIB_SYNTAX_ERROR;
goto fini;
@@ -2545,7 +2555,7 @@ main(int argc, char * argv[])
op->vpd_pn = sg_get_num_nomult(op->page_str);
if ((op->vpd_pn < 0) || (op->vpd_pn > 255)) {
pr2serr("Bad page code value after '-p' option\n");
- printf("Available standard VPD pages:\n");
+ sgj_pr_hr(jsp, "Available standard VPD pages:\n");
enumerate_vpds(1, 1);
ret = SG_LIB_SYNTAX_ERROR;
goto fini;
diff --git a/src/sg_vpd_common.c b/src/sg_vpd_common.c
index 14b1bd2d..dcc7727b 100644
--- a/src/sg_vpd_common.c
+++ b/src/sg_vpd_common.c
@@ -1712,7 +1712,7 @@ decode_block_lb_prov_vpd(const uint8_t * buff, int len, struct opts_t * op,
if (jsp->pr_as_json && jsp->pr_out_hr)
sgj_js_str_out(jsp, b, strlen(b));
else
- printf("%s", b);
+ sgj_pr_hr(jsp, "%s", b);
}
return 0;
}
@@ -2237,6 +2237,8 @@ decode_rod_descriptor(const uint8_t * buff, int len, struct opts_t * op,
const uint8_t * bp = buff;
sgj_state * jsp = &op->json_st;
sgj_opaque_p jo2p;
+ char b[80];
+ static const int blen = sizeof(b);
static const char * ab_pdt = "abnormal use of 'pdt'";
for (k = 0; k < len; k += bump, bp += bump) {
@@ -2285,11 +2287,11 @@ decode_rod_descriptor(const uint8_t * buff, int len, struct opts_t * op,
sgj_haj_vi(jsp, jo2p, 4, "Maximum bytes in stream ROD",
SGJ_SEP_COLON_1_SPACE, ull, true);
ull = sg_get_unaligned_be64(bp + 16);
- printf(" Optimal Bytes in stream ROD transfer: ");
+ snprintf(b, blen, " Optimal Bytes in stream ROD transfer: ");
if (SG_LIB_UNBOUNDED_64BIT == ull)
- printf("-1 [no limit]\n");
+ sgj_pr_hr(jsp, "%s-1 [no limit]\n", b);
else
- printf("%" PRIu64 "\n", ull);
+ sgj_pr_hr(jsp, "%s%" PRIu64 "\n", b, ull);
break;
case 3:
/* Copy manager ROD device type specific descriptor */
@@ -2297,14 +2299,14 @@ decode_rod_descriptor(const uint8_t * buff, int len, struct opts_t * op,
pdt, false, NULL, "Copy manager ROD "
"device type specific descriptor",
ab_pdt);
- printf(" Maximum Bytes in processor ROD: %" PRIu64 "\n",
- sg_get_unaligned_be64(bp + 8));
+ sgj_pr_hr(jsp, " Maximum Bytes in processor ROD: %" PRIu64 "\n",
+ sg_get_unaligned_be64(bp + 8));
ull = sg_get_unaligned_be64(bp + 16);
- printf(" Optimal Bytes in processor ROD transfer: ");
+ snprintf(b, blen, " Optimal Bytes in processor ROD transfer: ");
if (SG_LIB_UNBOUNDED_64BIT == ull)
- printf("-1 [no limit]\n");
+ sgj_pr_hr(jsp, "%s-1 [no limit]\n", b);
else
- printf("%" PRIu64 "\n", ull);
+ sgj_pr_hr(jsp, "%s%" PRIu64 "\n", b, ull);
break;
default:
sgj_js_nv_ihexstr(jsp, jo2p, "peripheral_device_type",