aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sg_cmds_basic.c10
-rw-r--r--lib/sg_cmds_extra.c13
-rw-r--r--lib/sg_cmds_mmc.c18
-rw-r--r--lib/sg_lib.c61
-rw-r--r--lib/sg_pt_freebsd.c48
-rw-r--r--lib/sg_pt_linux.c16
-rw-r--r--lib/sg_pt_linux_nvme.c23
7 files changed, 113 insertions, 76 deletions
diff --git a/lib/sg_cmds_basic.c b/lib/sg_cmds_basic.c
index d1a61168..899caae1 100644
--- a/lib/sg_cmds_basic.c
+++ b/lib/sg_cmds_basic.c
@@ -113,7 +113,6 @@ sg_cmds_process_helper(const char * leadin, int req_din_x, int act_din_x,
int scat;
bool n = false;
bool check_data_in = false;
- char b[512];
scat = sg_err_category_sense(sbp, slen);
switch (scat) {
@@ -145,6 +144,8 @@ sg_cmds_process_helper(const char * leadin, int req_din_x, int act_din_x,
break;
}
if (verbose || n) {
+ char b[512];
+
if (leadin && (strlen(leadin) > 0))
pr2ws("%s:\n", leadin);
sg_get_sense_str(NULL, sbp, slen, (verbose > 1),
@@ -192,7 +193,7 @@ sg_cmds_process_resp(struct sg_pt_base * ptvp, const char * leadin,
int pt_res, bool noisy, int verbose, int * o_sense_cat)
{
bool favour_sense;
- int cat, slen, resp_code, sstat, req_din_x, req_dout_x;
+ int cat, slen, sstat, req_din_x, req_dout_x;
int act_din_x, act_dout_x;
const uint8_t * sbp;
char b[1024];
@@ -244,7 +245,8 @@ sg_cmds_process_resp(struct sg_pt_base * ptvp, const char * leadin,
switch ((cat = get_scsi_pt_result_category(ptvp))) {
case SCSI_PT_RESULT_GOOD:
if (sbp && (slen > 7)) {
- resp_code = sbp[0] & 0x7f;
+ int resp_code = sbp[0] & 0x7f;
+
/* SBC referrals can have status=GOOD and sense_key=COMPLETED */
if (resp_code >= 0x70) {
if (resp_code < 0x72) {
@@ -399,7 +401,7 @@ sg_ll_inquiry_com(struct sg_pt_base * ptvp, int sg_fd, bool cmddt, bool evpd,
sg_get_command_str(inq_cdb, INQUIRY_CMDLEN, false, sizeof(b),
b));
}
- if (resp && (mx_resp_len > 0)) {
+ if (mx_resp_len > 0) {
up = (uint8_t *)resp;
up[0] = 0x7f; /* defensive prefill */
if (mx_resp_len > 4)
diff --git a/lib/sg_cmds_extra.c b/lib/sg_cmds_extra.c
index 7874dd16..e55e8075 100644
--- a/lib/sg_cmds_extra.c
+++ b/lib/sg_cmds_extra.c
@@ -1203,12 +1203,13 @@ static bool
has_blk_ili(uint8_t * sensep, int sb_len)
{
int resp_code;
- const uint8_t * cup;
if (sb_len < 8)
return false;
resp_code = (0x7f & sensep[0]);
if (resp_code >= 0x72) { /* descriptor format */
+ const uint8_t * cup;
+
/* find block command descriptor */
if ((cup = sg_scsi_sense_desc_find(sensep, sb_len, 0x5)))
return (cup[3] & 0x20);
@@ -1567,7 +1568,7 @@ sg_ll_verify10(int sg_fd, int vrprotect, bool dpo, int bytchk,
int vb)
{
static const char * const cdb_s = "verify(10)";
- int k, res, ret, s_cat, slen;
+ int res, ret, s_cat, slen;
uint8_t v_cdb[VERIFY10_CMDLEN] =
{VERIFY10_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -1586,7 +1587,8 @@ sg_ll_verify10(int sg_fd, int vrprotect, bool dpo, int bytchk,
sg_get_command_str(v_cdb, VERIFY10_CMDLEN,
false, sizeof(b), b));
if ((vb > 3) && bytchk && data_out && (data_out_len > 0)) {
- k = data_out_len > 4104 ? 4104 : data_out_len;
+ int k = data_out_len > 4104 ? 4104 : data_out_len;
+
pr2ws(" data_out buffer%s\n",
(data_out_len > 4104 ? ", first 4104 bytes" : ""));
hex2stderr((const uint8_t *)data_out, k, vb < 5);
@@ -1644,7 +1646,7 @@ sg_ll_verify16(int sg_fd, int vrprotect, bool dpo, int bytchk, uint64_t llba,
int data_out_len, uint64_t * infop, bool noisy, int vb)
{
static const char * const cdb_s = "verify(16)";
- int k, res, ret, s_cat, slen;
+ int res, ret, s_cat, slen;
uint8_t v_cdb[VERIFY16_CMDLEN] =
{VERIFY16_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -1664,7 +1666,8 @@ sg_ll_verify16(int sg_fd, int vrprotect, bool dpo, int bytchk, uint64_t llba,
sg_get_command_str(v_cdb, VERIFY16_CMDLEN,
false, sizeof(b), b));
if ((vb > 3) && bytchk && data_out && (data_out_len > 0)) {
- k = data_out_len > 4104 ? 4104 : data_out_len;
+ int k = data_out_len > 4104 ? 4104 : data_out_len;
+
pr2ws(" data_out buffer%s\n",
(data_out_len > 4104 ? ", first 4104 bytes" : ""));
hex2stderr((const uint8_t *)data_out, k, vb < 5);
diff --git a/lib/sg_cmds_mmc.c b/lib/sg_cmds_mmc.c
index b80e988f..c1dabd74 100644
--- a/lib/sg_cmds_mmc.c
+++ b/lib/sg_cmds_mmc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2019 Douglas Gilbert.
+ * Copyright (c) 2008-2021 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.
@@ -60,7 +60,7 @@ sg_ll_set_cd_speed(int sg_fd, int rot_control, int drv_read_speed,
int drv_write_speed, bool noisy, int verbose)
{
static const char * const cdb_s = "set cd speed";
- int res, ret, k, sense_cat;
+ int res, ret, sense_cat;
uint8_t scsCmdBlk[SET_CD_SPEED_CMDLEN] = {SET_CD_SPEED_CMD, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -71,6 +71,8 @@ sg_ll_set_cd_speed(int sg_fd, int rot_control, int drv_read_speed,
sg_put_unaligned_be16((uint16_t)drv_write_speed, scsCmdBlk + 4);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < SET_CD_SPEED_CMDLEN; ++k)
pr2ws("%02x ", scsCmdBlk[k]);
@@ -117,7 +119,7 @@ sg_ll_get_config(int sg_fd, int rt, int starting, void * resp,
int mx_resp_len, bool noisy, int verbose)
{
static const char * const cdb_s = "get configuration";
- int res, k, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t gcCmdBlk[GET_CONFIG_CMD_LEN] = {GET_CONFIG_CMD, 0, 0, 0,
0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -140,6 +142,8 @@ sg_ll_get_config(int sg_fd, int rt, int starting, void * resp,
sg_put_unaligned_be16((uint16_t)mx_resp_len, gcCmdBlk + 7);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < GET_CONFIG_CMD_LEN; ++k)
pr2ws("%02x ", gcCmdBlk[k]);
@@ -207,7 +211,7 @@ sg_ll_get_performance(int sg_fd, int data_type, unsigned int starting_lba,
int mx_resp_len, bool noisy, int verbose)
{
static const char * const cdb_s = "get performance";
- int res, k, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t gpCmdBlk[GET_PERFORMANCE_CMD_LEN] = {GET_PERFORMANCE_CMD, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -231,6 +235,8 @@ sg_ll_get_performance(int sg_fd, int data_type, unsigned int starting_lba,
gpCmdBlk[10] = (uint8_t)ttype;
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < GET_PERFORMANCE_CMD_LEN; ++k)
pr2ws("%02x ", gpCmdBlk[k]);
@@ -298,7 +304,7 @@ sg_ll_set_streaming(int sg_fd, int type, void * paramp, int param_len,
bool noisy, int verbose)
{
static const char * const cdb_s = "set streaming";
- int k, res, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t ssCmdBlk[SET_STREAMING_CMDLEN] =
{SET_STREAMING_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -307,6 +313,8 @@ sg_ll_set_streaming(int sg_fd, int type, void * paramp, int param_len,
ssCmdBlk[8] = type;
sg_put_unaligned_be16((uint16_t)param_len, ssCmdBlk + 9);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < SET_STREAMING_CMDLEN; ++k)
pr2ws("%02x ", ssCmdBlk[k]);
diff --git a/lib/sg_lib.c b/lib/sg_lib.c
index 1037c2c0..c5eeeddc 100644
--- a/lib/sg_lib.c
+++ b/lib/sg_lib.c
@@ -359,15 +359,14 @@ sg_get_asc_ascq_str(int asc, int ascq, int buff_len, char * buff)
{
int k, num, rlen;
bool found = false;
- struct sg_lib_asc_ascq_t * eip;
- struct sg_lib_asc_ascq_range_t * ei2p;
if (1 == buff_len) {
buff[0] = '\0';
return buff;
}
for (k = 0; sg_lib_asc_ascq_range[k].text; ++k) {
- ei2p = &sg_lib_asc_ascq_range[k];
+ struct sg_lib_asc_ascq_range_t * ei2p = &sg_lib_asc_ascq_range[k];
+
if ((ei2p->asc == asc) &&
(ascq >= ei2p->ascq_min) &&
(ascq <= ei2p->ascq_max)) {
@@ -381,7 +380,8 @@ sg_get_asc_ascq_str(int asc, int ascq, int buff_len, char * buff)
return buff;
for (k = 0; sg_lib_asc_ascq[k].text; ++k) {
- eip = &sg_lib_asc_ascq[k];
+ struct sg_lib_asc_ascq_t * eip = &sg_lib_asc_ascq[k];
+
if (eip->asc == asc &&
eip->ascq == ascq) {
found = true;
@@ -408,7 +408,7 @@ const uint8_t *
sg_scsi_sense_desc_find(const uint8_t * sbp, int sb_len,
int desc_type)
{
- int add_sb_len, add_d_len, desc_len, k;
+ int add_sb_len, desc_len, k;
const uint8_t * descp;
if ((sb_len < 8) || (0 == (add_sb_len = sbp[7])))
@@ -418,6 +418,8 @@ sg_scsi_sense_desc_find(const uint8_t * sbp, int sb_len,
add_sb_len = (add_sb_len < (sb_len - 8)) ? add_sb_len : (sb_len - 8);
descp = &sbp[8];
for (desc_len = 0, k = 0; k < add_sb_len; k += desc_len) {
+ int add_d_len;
+
descp += desc_len;
add_d_len = (k < (add_sb_len - 1)) ? descp[1]: -1;
desc_len = add_d_len + 2;
@@ -437,7 +439,6 @@ sg_get_sense_info_fld(const uint8_t * sbp, int sb_len,
uint64_t * info_outp)
{
const uint8_t * bp;
- uint64_t ull;
if (info_outp)
*info_outp = 0;
@@ -453,7 +454,8 @@ sg_get_sense_info_fld(const uint8_t * sbp, int sb_len,
case 0x73:
bp = sg_scsi_sense_desc_find(sbp, sb_len, 0 /* info desc */);
if (bp && (0xa == bp[1])) {
- ull = sg_get_unaligned_be64(bp + 4);
+ uint64_t ull = sg_get_unaligned_be64(bp + 4);
+
if (info_outp)
*info_outp = ull;
return !!(bp[2] & 0x80); /* since spc3r23 should be set */
@@ -631,7 +633,7 @@ char *
sg_decode_transportid_str(const char * lip, uint8_t * bp, int bplen,
bool only_one, int blen, char * b)
{
- int proto_id, num, k, n, normal_len, tpid_format;
+ int num, k, n;
uint64_t ull;
int bump;
@@ -645,6 +647,8 @@ sg_decode_transportid_str(const char * lip, uint8_t * bp, int bplen,
lip = "";
/* bump = TRANSPORT_ID_MIN_LEN; // some old compilers insisted on this */
for (k = 0, n = 0; bplen > 0; ++k, bp += bump, bplen -= bump) {
+ int proto_id, normal_len, tpid_format;
+
if ((k > 0) && only_one)
break;
if ((bplen < 24) || (0 != (bplen % 4)))
@@ -941,7 +945,6 @@ sg_get_designation_descriptor_str(const char * lip, const uint8_t * ddp,
int vsi, k, n, dlen;
const uint8_t * ip;
uint64_t vsei;
- uint64_t id_ext;
char e[64];
const char * cp;
@@ -1036,8 +1039,9 @@ sg_get_designation_descriptor_str(const char * lip, const uint8_t * ddp,
}
ci_off = 0;
if (16 == dlen) { /* first 8 bytes are 'Identifier Extension' */
+ uint64_t id_ext = sg_get_unaligned_be64(ip);
+
ci_off = 8;
- id_ext = sg_get_unaligned_be64(ip);
n += sg_scnpr(b + n, blen - n, "%s Identifier extension: 0x%"
PRIx64 "\n", lip, id_ext);
} else if ((8 != dlen) && (12 != dlen)) {
@@ -1402,9 +1406,8 @@ uds_referral_descriptor_str(char * b, int blen, const uint8_t * dp,
{
int n = 0;
int dlen = alen - 2;
- int k, j, g, f, tpgd;
+ int k, j, g, f;
const uint8_t * tp;
- uint64_t ull;
char c[40];
if (NULL == lip)
@@ -1413,7 +1416,9 @@ uds_referral_descriptor_str(char * b, int blen, const uint8_t * dp,
!!(dp[2] & 0x1));
dp += 4;
for (k = 0, f = 1; (k + 4) < dlen; k += g, dp += g, ++f) {
- tpgd = dp[3];
+ int tpgd = dp[3];
+ uint64_t ull;
+
g = (tpgd * 4) + 20;
n += sg_scnpr(b + n, blen - n, "%s Descriptor %d\n", lip, f);
if ((k + g) > dlen) {
@@ -1454,7 +1459,7 @@ int
sg_get_sense_descriptors_str(const char * lip, const uint8_t * sbp,
int sb_len, int blen, char * b)
{
- int add_sb_len, add_d_len, desc_len, k, j, sense_key;
+ int add_sb_len, desc_len, k, j, sense_key;
int n, progress, pr, rem;
uint16_t sct_sc;
bool processed;
@@ -1479,7 +1484,8 @@ sg_get_sense_descriptors_str(const char * lip, const uint8_t * sbp,
for (descp = (sbp + 8), k = 0, n = 0;
(k < add_sb_len) && (n < blen);
k += desc_len, descp += desc_len) {
- add_d_len = (k < (add_sb_len - 1)) ? descp[1] : -1;
+ int add_d_len = (k < (add_sb_len - 1)) ? descp[1] : -1;
+
if ((k + add_d_len + 2) > add_sb_len)
add_d_len = add_sb_len - k - 2;
desc_len = add_d_len + 2;
@@ -2161,14 +2167,13 @@ static const char * const bad_sense_cat = "Bad sense category";
const char *
sg_get_category_sense_str(int sense_cat, int b_len, char * b, int verbose)
{
- int n;
-
if (NULL == b)
return bad_sense_cat;
if (b_len <= 0)
return b;
if (! sg_exit2str(sense_cat, (verbose > 0), b_len, b)) {
- n = sg_scnpr(b, b_len, "Sense category: %d", sense_cat);
+ int n = sg_scnpr(b, b_len, "Sense category: %d", sense_cat);
+
if ((0 == verbose) && (n < (b_len - 1)))
sg_scnpr(b + n, b_len - n, ", try '-v' option for more "
"information");
@@ -2620,7 +2625,6 @@ sg_get_sfs_str(uint16_t sfs_code, int peri_type, int buff_len, char * buff,
bool
sg_is_scsi_cdb(const uint8_t * cdbp, int clen)
{
- int ilen, sa;
uint8_t opcode;
uint8_t top3bits;
@@ -2629,6 +2633,8 @@ sg_is_scsi_cdb(const uint8_t * cdbp, int clen)
opcode = cdbp[0];
top3bits = opcode >> 5;
if (0x3 == top3bits) {
+ int ilen, sa;
+
if ((clen < 12) || (clen % 4))
return false; /* must be modulo 4 and 12 or more bytes */
switch (opcode) {
@@ -2801,14 +2807,14 @@ static char safe_errbuf[64] = {'u', 'n', 'k', 'n', 'o', 'w', 'n', ' ',
char *
safe_strerror(int errnum)
{
- size_t len;
char * errstr;
if (errnum < 0)
errnum = -errnum;
errstr = strerror(errnum);
if (NULL == errstr) {
- len = strlen(safe_errbuf);
+ size_t len = strlen(safe_errbuf);
+
sg_scnpr(safe_errbuf + len, sizeof(safe_errbuf) - len, "%i", errnum);
return safe_errbuf;
}
@@ -2946,7 +2952,6 @@ int
dStrHexStr(const char * str, int len, const char * leadin, int format,
int b_len, char * b)
{
- uint8_t c;
int bpstart, bpos, k, n, prior_ascii_len;
bool want_ascii;
char buff[DSHS_LINE_BLEN + 2];
@@ -2980,7 +2985,8 @@ dStrHexStr(const char * str, int len, const char * leadin, int format,
if (bpstart > 0)
memcpy(buff, leadin, bpstart);
for (k = 0; k < len; k++) {
- c = *p++;
+ uint8_t c = *p++;
+
if (bpos == (bpstart + ((DSHS_BPL / 2) * 3)))
bpos++; /* for extra space in middle of each line's hex */
sg_scnpr(buff + bpos, (int)sizeof(buff) - bpos, "%.2x",
@@ -3742,12 +3748,12 @@ sg_ata_get_chars(const uint16_t * word_arr, int start_word,
int num_words, bool is_big_endian, char * ochars)
{
int k;
- uint16_t s;
- char a, b;
char * op = ochars;
for (k = start_word; k < (start_word + num_words); ++k) {
- s = word_arr[k];
+ char a, b;
+ uint16_t s = word_arr[k];
+
if (is_big_endian) {
a = s & 0xff;
b = (s >> 8) & 0xff;
@@ -3806,7 +3812,6 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
bool vb)
{
size_t psz;
- uint8_t * res;
if (buff_to_free) /* make sure buff_to_free is NULL if alloc fails */
*buff_to_free = NULL;
@@ -3817,6 +3822,7 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
#ifdef HAVE_POSIX_MEMALIGN
{
int err;
+ uint8_t * res;
void * wp = NULL;
err = posix_memalign(&wp, psz, num_bytes);
@@ -3840,6 +3846,7 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
#else
{
void * wrkBuff;
+ uint8_t * res;
sg_uintptr_t align_1 = psz - 1;
wrkBuff = (uint8_t *)calloc(num_bytes + psz, 1);
diff --git a/lib/sg_pt_freebsd.c b/lib/sg_pt_freebsd.c
index b6af6704..ad25e8ca 100644
--- a/lib/sg_pt_freebsd.c
+++ b/lib/sg_pt_freebsd.c
@@ -7,7 +7,7 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
-/* sg_pt_freebsd version 1.44 20210601 */
+/* sg_pt_freebsd version 1.45 20210731 */
#include <stdio.h>
#include <stdlib.h>
@@ -587,19 +587,18 @@ destruct_scsi_pt_obj(struct sg_pt_base * vp)
void
clear_scsi_pt_obj(struct sg_pt_base * vp)
{
- int dev_han;
struct sg_pt_freebsd_scsi * ptp;
- struct freebsd_dev_channel *fdc_p;
if (NULL == vp) {
pr2ws(">>>>> %s: NULL pointer given\n", __func__);
return;
}
if ((ptp = &vp->impl)) {
+ int dev_han = ptp->dev_han;
+ struct freebsd_dev_channel *fdc_p = ptp->mchanp;
+
if (ptp->ccb)
cam_freeccb(ptp->ccb);
- dev_han = ptp->dev_han;
- fdc_p = ptp->mchanp;
memset(ptp, 0, sizeof(struct sg_pt_freebsd_scsi));
ptp->dxfer_dir = CAM_DIR_NONE;
ptp->dev_han = dev_han;
@@ -817,7 +816,6 @@ set_scsi_pt_flags(struct sg_pt_base * objp, int flags)
int
do_scsi_pt(struct sg_pt_base * vp, int dev_han, int time_secs, int vb)
{
- int len;
struct sg_pt_freebsd_scsi * ptp = &vp->impl;
struct freebsd_dev_channel *fdc_p;
FILE * ferrp = sg_warnings_strm ? sg_warnings_strm : stderr;
@@ -928,6 +926,8 @@ do_scsi_pt(struct sg_pt_base * vp, int dev_han, int time_secs, int vb)
if ((SAM_STAT_CHECK_CONDITION == ptp->scsi_status) ||
(SAM_STAT_COMMAND_TERMINATED == ptp->scsi_status)) {
+ int len;
+
if (ptp->sense_resid > ptp->sense_len)
len = ptp->sense_len; /* crazy; ignore sense_resid */
else
@@ -1343,7 +1343,7 @@ mk_sense_invalid_fld(struct sg_pt_freebsd_scsi * ptp, bool in_cdb,
int in_byte, int in_bit, int vb)
{
bool ds = ptp->mchanp ? ptp->mchanp->dev_stat.scsi_dsense : false;
- int sl, asc, n;
+ int asc, n;
uint8_t * sbp = (uint8_t *)ptp->sense;
uint8_t sks[4];
@@ -1369,7 +1369,8 @@ mk_sense_invalid_fld(struct sg_pt_freebsd_scsi * ptp, bool in_cdb,
}
sg_put_unaligned_be16(in_byte, sks + 1);
if (ds) {
- sl = sbp[7] + 8;
+ int sl = sbp[7] + 8;
+
sbp[7] = sl;
sbp[sl] = 0x2;
sbp[sl + 1] = 0x6;
@@ -1402,7 +1403,6 @@ nvme_pt_low(struct sg_pt_freebsd_scsi * ptp, void * dxferp, uint32_t len,
uint16_t sct_sc;
uint8_t opcode;
struct freebsd_dev_channel *fdc_p = ptp->mchanp;
- char b[80];
if (vb > 6)
pr2ws("%s: is_read=%d, time_secs=%d, is_cam_nvme=%d, is_admin=%d\n",
@@ -1480,6 +1480,7 @@ nvme_pt_low(struct sg_pt_freebsd_scsi * ptp, void * dxferp, uint32_t len,
ptp->cq_dw0_3 + SG_NVME_PT_CQ_STATUS_P);
if (sct_sc && (vb > 1)) {
char nam[64];
+ char b[80];
sg_get_nvme_opcode_name(opcode, is_admin, sizeof(nam), nam);
pr2ws("%s: %s [0x%x], status: %s\n", __func__, nam, opcode,
@@ -1577,6 +1578,7 @@ cam_nvme:
ptp->cq_dw0_3 + SG_NVME_PT_CQ_STATUS_P);
if (sct_sc && (vb > 1)) {
char nam[64];
+ char b[80];
sg_get_nvme_opcode_name(opcode, is_admin, sizeof(nam),
nam);
@@ -1603,7 +1605,7 @@ sntl_check_enclosure_override(struct freebsd_dev_channel * fdc_p, int vb)
fdc_p->dev_stat.id_ctl253 = nvmsr;
switch (fdc_p->dev_stat.enclosure_override) {
case 0x0: /* no override */
- if (0x3 & nvmsr) {
+ if (0x3 == (0x3 & nvmsr)) {
fdc_p->dev_stat.pdt = PDT_DISK;
fdc_p->dev_stat.enc_serv = 1;
} else if (0x2 & nvmsr) {
@@ -1704,7 +1706,6 @@ sntl_inq(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp, int time_secs,
int vb)
{
bool evpd;
- bool cp_id_ctl = false;
int res;
uint16_t n, alloc_len, pg_cd;
uint32_t pg_sz = sg_get_page_size();
@@ -1739,6 +1740,8 @@ sntl_inq(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp, int time_secs,
evpd = !!(0x1 & cdbp[1]);
pg_cd = cdbp[2];
if (evpd) { /* VPD page responses */
+ bool cp_id_ctl = false;
+
switch (pg_cd) {
case 0: /* Supported VPD pages VPD page */
/* inq_dout[0] = (PQ=0)<<5 | (PDT=0); prefer pdt=0xd --> SES */
@@ -1942,7 +1945,7 @@ sntl_rluns(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
static int
sntl_tur(struct sg_pt_freebsd_scsi * ptp, int time_secs, int vb)
{
- int res, err;
+ int err;
uint32_t pow_state;
struct nvme_pt_command npc;
uint8_t * npc_up = (uint8_t *)&npc;
@@ -1957,7 +1960,8 @@ sntl_tur(struct sg_pt_freebsd_scsi * ptp, int time_secs, int vb)
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -1998,7 +2002,7 @@ sntl_req_sense(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
int time_secs, int vb)
{
bool desc;
- int res, err;
+ int err;
uint32_t pow_state, alloc_len, n;
struct nvme_pt_command npc;
uint8_t * npc_up = (uint8_t *)&npc;
@@ -2014,7 +2018,8 @@ sntl_req_sense(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -2065,7 +2070,7 @@ sntl_mode_ss(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
int time_secs, int vb)
{
bool is_msense = (SCSI_MODE_SENSE10_OPC == cdbp[0]);
- int res, n, len;
+ int n, len;
uint8_t * bp;
struct freebsd_dev_channel * fdc_p;
struct sg_sntl_result_t sntl_result;
@@ -2079,7 +2084,8 @@ sntl_mode_ss(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -2365,10 +2371,10 @@ sntl_rep_opcodes(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
{
bool rctd;
uint8_t reporting_opts, req_opcode, supp;
- uint16_t req_sa, u;
+ uint16_t req_sa;
uint32_t alloc_len, offset, a_len;
uint32_t pg_sz = sg_get_page_size();
- int k, len, count, bump;
+ int len, count, bump;
const struct sg_opcode_info_t *oip;
uint8_t *arr;
uint8_t *free_arr;
@@ -2445,7 +2451,9 @@ sntl_rep_opcodes(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
else
supp = 3;
if (3 == supp) {
- u = oip->len_mask[0];
+ uint16_t u = oip->len_mask[0];
+ int k;
+
sg_put_unaligned_be16(u, arr + 2);
arr[4] = oip->opcode;
for (k = 1; k < u; ++k)
diff --git a/lib/sg_pt_linux.c b/lib/sg_pt_linux.c
index 9da8bab6..cd9083d0 100644
--- a/lib/sg_pt_linux.c
+++ b/lib/sg_pt_linux.c
@@ -385,12 +385,13 @@ static bool ev_dsense = false;
struct sg_pt_base *
construct_scsi_pt_obj_with_fd(int dev_fd, int verbose)
{
- int err;
struct sg_pt_linux_scsi * ptp;
ptp = (struct sg_pt_linux_scsi *)
calloc(1, sizeof(struct sg_pt_linux_scsi));
if (ptp) {
+ int err;
+
#if (HAVE_NVME && (! IGNORE_NVME))
sntl_init_dev_stat(&ptp->dev_stat);
if (! checked_ev_dsense) {
@@ -444,13 +445,14 @@ destruct_scsi_pt_obj(struct sg_pt_base * vp)
void
clear_scsi_pt_obj(struct sg_pt_base * vp)
{
- bool is_sg, is_bsg, is_nvme;
- int fd;
- uint32_t nvme_nsid;
- struct sg_sntl_dev_state_t dev_stat;
struct sg_pt_linux_scsi * ptp = &vp->impl;
if (ptp) {
+ bool is_sg, is_bsg, is_nvme;
+ int fd;
+ uint32_t nvme_nsid;
+ struct sg_sntl_dev_state_t dev_stat;
+
fd = ptp->dev_fd;
is_sg = ptp->is_sg;
is_bsg = ptp->is_bsg;
@@ -1119,7 +1121,6 @@ do_scsi_pt_v4(struct sg_pt_linux_scsi * ptp, int fd, int time_secs,
int
do_scsi_pt(struct sg_pt_base * vp, int fd, int time_secs, int verbose)
{
- int err;
struct sg_pt_linux_scsi * ptp = &vp->impl;
bool have_checked_for_type = (ptp->dev_fd >= 0);
@@ -1147,7 +1148,8 @@ do_scsi_pt(struct sg_pt_base * vp, int fd, int time_secs, int verbose)
} else
fd = ptp->dev_fd;
if (! have_checked_for_type) {
- err = set_pt_file_handle(vp, ptp->dev_fd, verbose);
+ int err = set_pt_file_handle(vp, ptp->dev_fd, verbose);
+
if (err)
return -ptp->os_err;
}
diff --git a/lib/sg_pt_linux_nvme.c b/lib/sg_pt_linux_nvme.c
index 3dbd182e..5a710f9d 100644
--- a/lib/sg_pt_linux_nvme.c
+++ b/lib/sg_pt_linux_nvme.c
@@ -251,7 +251,7 @@ mk_sense_invalid_fld(struct sg_pt_linux_scsi * ptp, bool in_cdb, int in_byte,
int in_bit, int vb)
{
bool dsense = !! ptp->dev_stat.scsi_dsense;
- int sl, asc, n;
+ int asc, n;
uint8_t * sbp = (uint8_t *)(sg_uintptr_t)ptp->io_hdr.response;
uint8_t sks[4];
@@ -278,7 +278,8 @@ mk_sense_invalid_fld(struct sg_pt_linux_scsi * ptp, bool in_cdb, int in_byte,
}
sg_put_unaligned_be16(in_byte, sks + 1);
if (dsense) {
- sl = sbp[7] + 8;
+ int sl = sbp[7] + 8;
+
sbp[7] = sl;
sbp[sl] = 0x2;
sbp[sl + 1] = 0x6;
@@ -408,7 +409,7 @@ sntl_check_enclosure_override(struct sg_pt_linux_scsi * ptp, int vb)
ptp->dev_stat.id_ctl253 = nvmsr;
switch (ptp->dev_stat.enclosure_override) {
case 0x0: /* no override */
- if (0x3 & nvmsr) {
+ if (0x3 == (0x3 & nvmsr)) {
ptp->dev_stat.pdt = PDT_DISK;
ptp->dev_stat.enc_serv = 1;
} else if (0x2 & nvmsr) {
@@ -521,7 +522,6 @@ sntl_inq(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp, int time_secs,
int vb)
{
bool evpd;
- bool cp_id_ctl = false;
int res;
uint16_t n, alloc_len, pg_cd;
uint32_t pg_sz = sg_get_page_size();
@@ -549,6 +549,8 @@ sntl_inq(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp, int time_secs,
evpd = !!(0x1 & cdbp[1]);
pg_cd = cdbp[2];
if (evpd) { /* VPD page responses */
+ bool cp_id_ctl = false;
+
switch (pg_cd) {
case 0:
/* inq_dout[0] = (PQ=0)<<5 | (PDT=0); prefer pdt=0xd --> SES */
@@ -885,7 +887,7 @@ sntl_mode_ss(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
cmdp->nsid = nsid ? nsid : SG_NVME_BROADCAST_NSID;
cmdp->cdw10 = 0x6; /* "Volatile write cache" feature id */
if (sp)
- cmdp->cdw10 |= (1 << 31);
+ cmdp->cdw10 |= (1U << 31);
cmdp->cdw11 = (uint32_t)ptp->dev_stat.wce;
cmdp->timeout_ms = (time_secs < 0) ? 0 : (1000 * time_secs);
res = sg_nvme_admin_cmd(ptp, cmdp, NULL, false, time_secs, vb);
@@ -934,7 +936,7 @@ sntl_senddiag(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
bool pf, self_test;
int res;
uint8_t st_cd, dpg_cd;
- uint32_t alloc_len, n, dout_len, dpg_len, nvme_dst;
+ uint32_t alloc_len, n, dout_len, dpg_len;
const uint32_t pg_sz = sg_get_page_size();
uint8_t * dop;
struct sg_nvme_passthru_cmd cmd;
@@ -947,6 +949,8 @@ sntl_senddiag(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
pr2ws("%s: pf=%d, self_test=%d (st_code=%d)\n", __func__, (int)pf,
(int)self_test, (int)st_cd);
if (self_test || st_cd) {
+ uint32_t nvme_dst;
+
memset(cmd_up, 0, sizeof(cmd));
cmd_up[SG_NVME_PT_OPCODE] = SG_NVME_AD_DEV_SELT_TEST;
/* just this namespace (if there is one) and controller */
@@ -1107,10 +1111,10 @@ sntl_rep_opcodes(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
{
bool rctd;
uint8_t reporting_opts, req_opcode, supp;
- uint16_t req_sa, u;
+ uint16_t req_sa;
uint32_t alloc_len, offset, a_len;
uint32_t pg_sz = sg_get_page_size();
- int k, len, count, bump;
+ int len, count, bump;
const struct sg_opcode_info_t *oip;
uint8_t *arr;
uint8_t *free_arr;
@@ -1186,6 +1190,9 @@ sntl_rep_opcodes(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
else
supp = 3;
if (3 == supp) {
+ uint16_t u;
+ int k;
+
u = oip->len_mask[0];
sg_put_unaligned_be16(u, arr + 2);
arr[4] = oip->opcode;