sg_timestamp.c (sg3_utils-1.47r908.tgz) | : | sg_timestamp.c (sg3_utils-1.47r915.tar.xz) | ||
---|---|---|---|---|
/* | /* | |||
* Copyright (c) 2015-2019 Douglas Gilbert. | * Copyright (c) 2015-2021 Douglas Gilbert. | |||
* All rights reserved. | * All rights reserved. | |||
* Use of this source code is governed by a BSD-style | * Use of this source code is governed by a BSD-style | |||
* license that can be found in the BSD_LICENSE file. | * license that can be found in the BSD_LICENSE file. | |||
* | * | |||
* SPDX-License-Identifier: BSD-2-Clause | * SPDX-License-Identifier: BSD-2-Clause | |||
*/ | */ | |||
#include <unistd.h> | #include <unistd.h> | |||
#include <fcntl.h> | #include <fcntl.h> | |||
#include <stdio.h> | #include <stdio.h> | |||
skipping to change at line 40 | skipping to change at line 40 | |||
#include "sg_unaligned.h" | #include "sg_unaligned.h" | |||
#include "sg_pr2serr.h" | #include "sg_pr2serr.h" | |||
/* A utility program originally written for the Linux OS SCSI subsystem. | /* A utility program originally written for the Linux OS SCSI subsystem. | |||
* | * | |||
* | * | |||
* This program issues a SCSI REPORT TIMESTAMP and SET TIMESTAMP commands | * This program issues a SCSI REPORT TIMESTAMP and SET TIMESTAMP commands | |||
* to the given SCSI device. Based on spc5r07.pdf . | * to the given SCSI device. Based on spc5r07.pdf . | |||
*/ | */ | |||
static const char * version_str = "1.14 20191220"; | static const char * version_str = "1.14 20210830"; | |||
#define REP_TIMESTAMP_CMDLEN 12 | #define REP_TIMESTAMP_CMDLEN 12 | |||
#define SET_TIMESTAMP_CMDLEN 12 | #define SET_TIMESTAMP_CMDLEN 12 | |||
#define REP_TIMESTAMP_SA 0xf | #define REP_TIMESTAMP_SA 0xf | |||
#define SET_TIMESTAMP_SA 0xf | #define SET_TIMESTAMP_SA 0xf | |||
#define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ | #define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ | |||
#define DEF_PT_TIMEOUT 60 /* 60 seconds */ | #define DEF_PT_TIMEOUT 60 /* 60 seconds */ | |||
uint8_t d_buff[256]; | uint8_t d_buff[256]; | |||
skipping to change at line 221 | skipping to change at line 221 | |||
if (NULL == ptvp) { | if (NULL == ptvp) { | |||
pr2serr("%s: out of memory\n", __func__); | pr2serr("%s: out of memory\n", __func__); | |||
return -1; | return -1; | |||
} | } | |||
set_scsi_pt_cdb(ptvp, rt_cdb, sizeof(rt_cdb)); | set_scsi_pt_cdb(ptvp, rt_cdb, sizeof(rt_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 timestamp", res, noisy, verbose, | ret = sg_cmds_process_resp(ptvp, "report timestamp", 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 | |||
skipping to change at line 284 | skipping to change at line 287 | |||
if (NULL == ptvp) { | if (NULL == ptvp) { | |||
pr2serr("%s: out of memory\n", __func__); | pr2serr("%s: out of memory\n", __func__); | |||
return -1; | return -1; | |||
} | } | |||
set_scsi_pt_cdb(ptvp, st_cdb, sizeof(st_cdb)); | set_scsi_pt_cdb(ptvp, st_cdb, sizeof(st_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_out(ptvp, (uint8_t *)paramp, param_len); | set_scsi_pt_data_out(ptvp, (uint8_t *)paramp, param_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, "set timestamp", res, noisy, verbose, | ret = sg_cmds_process_resp(ptvp, "set timestamp", 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. 4 change blocks. | ||||
8 lines changed or deleted | 14 lines changed or added |