sg_cmds_basic.c (sg3_utils-1.47r908.tgz) | : | sg_cmds_basic.c (sg3_utils-1.47r915.tar.xz) | ||
---|---|---|---|---|
skipping to change at line 44 | skipping to change at line 44 | |||
#include "sg_cmds_basic.h" | #include "sg_cmds_basic.h" | |||
#include "sg_pt.h" | #include "sg_pt.h" | |||
#include "sg_unaligned.h" | #include "sg_unaligned.h" | |||
#include "sg_pr2serr.h" | #include "sg_pr2serr.h" | |||
/* Needs to be after config.h */ | /* Needs to be after config.h */ | |||
#ifdef SG_LIB_LINUX | #ifdef SG_LIB_LINUX | |||
#include <errno.h> | #include <errno.h> | |||
#endif | #endif | |||
static const char * const version_str = "1.98 20210601"; | static const char * const version_str = "1.99 20210830"; | |||
#define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ | #define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ | |||
#define EBUFF_SZ 256 | #define EBUFF_SZ 256 | |||
#define DEF_PT_TIMEOUT 60 /* 60 seconds */ | #define DEF_PT_TIMEOUT 60 /* 60 seconds */ | |||
#define START_PT_TIMEOUT 120 /* 120 seconds == 2 minutes */ | #define START_PT_TIMEOUT 120 /* 120 seconds == 2 minutes */ | |||
#define LONG_PT_TIMEOUT 7200 /* 7,200 seconds == 120 minutes */ | #define LONG_PT_TIMEOUT 7200 /* 7,200 seconds == 120 minutes */ | |||
#define INQUIRY_CMD 0x12 | #define INQUIRY_CMD 0x12 | |||
#define INQUIRY_CMDLEN 6 | #define INQUIRY_CMDLEN 6 | |||
skipping to change at line 433 | skipping to change at line 433 | |||
set_scsi_pt_cdb(ptvp, inq_cdb, sizeof(inq_cdb)); | set_scsi_pt_cdb(ptvp, inq_cdb, sizeof(inq_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} | } | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, -1, timeout_secs, verbose); | res = do_scsi_pt(ptvp, -1, timeout_secs, verbose); | |||
ret = sg_cmds_process_resp(ptvp, inquiry_s, res, noisy, verbose, | ret = sg_cmds_process_resp(ptvp, inquiry_s, res, noisy, verbose, | |||
&sense_cat); | &sense_cat); | |||
resid = get_scsi_pt_resid(ptvp); | resid = get_scsi_pt_resid(ptvp); | |||
if (residp) | if (residp) | |||
*residp = resid; | *residp = resid; | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else if (ret < 4) { | } else if (ret < 4) { | |||
skipping to change at line 652 | skipping to change at line 655 | |||
} else { | } else { | |||
ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | |||
if (NULL == ptvp) | if (NULL == ptvp) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, tur_cdb, sizeof(tur_cdb)); | set_scsi_pt_cdb(ptvp, tur_cdb, sizeof(tur_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} | } | |||
set_scsi_pt_packet_id(ptvp, pack_id); | set_scsi_pt_packet_id(ptvp, pack_id); | |||
res = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, tur_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, tur_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
if (progress) { | if (progress) { | |||
int slen = get_scsi_pt_sense_len(ptvp); | int slen = get_scsi_pt_sense_len(ptvp); | |||
if (! sg_get_sense_progress_fld(sense_b, slen, progress)) | if (! sg_get_sense_progress_fld(sense_b, slen, progress)) | |||
*progress = -1; | *progress = -1; | |||
} | } | |||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
ret = 0; | ret = 0; | |||
skipping to change at line 767 | skipping to change at line 773 | |||
} else { | } else { | |||
ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | ptvp = construct_scsi_pt_obj_with_fd(sg_fd, verbose); | |||
if (NULL == ptvp) | if (NULL == ptvp) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rs_cdb, sizeof(rs_cdb)); | set_scsi_pt_cdb(ptvp, rs_cdb, sizeof(rs_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} | } | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, -1, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, rq_s, res, noisy, verbose, &sense_cat); | ret = sg_cmds_process_resp(ptvp, rq_s, res, noisy, verbose, &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else { | } else { | |||
skipping to change at line 859 | skipping to change at line 868 | |||
} else { | } else { | |||
if (NULL == ((ptvp = create_pt_obj(report_luns_s)))) | if (NULL == ((ptvp = create_pt_obj(report_luns_s)))) | |||
return sg_convert_errno(ENOMEM); | return sg_convert_errno(ENOMEM); | |||
set_scsi_pt_cdb(ptvp, rl_cdb, sizeof(rl_cdb)); | set_scsi_pt_cdb(ptvp, rl_cdb, sizeof(rl_cdb)); | |||
set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); | |||
} | } | |||
set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | set_scsi_pt_data_in(ptvp, (uint8_t *)resp, mx_resp_len); | |||
res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | res = do_scsi_pt(ptvp, sg_fd, DEF_PT_TIMEOUT, verbose); | |||
ret = sg_cmds_process_resp(ptvp, report_luns_s, res, noisy, verbose, | ret = sg_cmds_process_resp(ptvp, report_luns_s, res, noisy, verbose, | |||
&sense_cat); | &sense_cat); | |||
if (-1 == ret) | if (-1 == ret) { | |||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | if (get_scsi_pt_transport_err(ptvp)) | |||
else if (-2 == ret) { | ret = SG_LIB_TRANSPORT_ERROR; | |||
else | ||||
ret = sg_convert_errno(get_scsi_pt_os_err(ptvp)); | ||||
} else if (-2 == ret) { | ||||
switch (sense_cat) { | switch (sense_cat) { | |||
case SG_LIB_CAT_RECOVERED: | case SG_LIB_CAT_RECOVERED: | |||
case SG_LIB_CAT_NO_SENSE: | case SG_LIB_CAT_NO_SENSE: | |||
ret = 0; | ret = 0; | |||
break; | break; | |||
default: | default: | |||
ret = sense_cat; | ret = sense_cat; | |||
break; | break; | |||
} | } | |||
} else | } else | |||
End of changes. 5 change blocks. | ||||
13 lines changed or deleted | 25 lines changed or added |