sg_decode_sense.c (sg3_utils-1.47r908.tgz) | : | sg_decode_sense.c (sg3_utils-1.47r915.tar.xz) | ||
---|---|---|---|---|
skipping to change at line 32 | skipping to change at line 32 | |||
#define __STDC_FORMAT_MACROS 1 | #define __STDC_FORMAT_MACROS 1 | |||
#include <inttypes.h> | #include <inttypes.h> | |||
#ifdef HAVE_CONFIG_H | #ifdef HAVE_CONFIG_H | |||
#include "config.h" | #include "config.h" | |||
#endif | #endif | |||
#include "sg_lib.h" | #include "sg_lib.h" | |||
#include "sg_pr2serr.h" | #include "sg_pr2serr.h" | |||
#include "sg_unaligned.h" | #include "sg_unaligned.h" | |||
static const char * version_str = "1.22 20210610"; | static const char * version_str = "1.23 20211001"; | |||
#define MAX_SENSE_LEN 1024 /* max descriptor format actually: 255+8 */ | #define MAX_SENSE_LEN 1024 /* max descriptor format actually: 255+8 */ | |||
static struct option long_options[] = { | static struct option long_options[] = { | |||
{"binary", required_argument, 0, 'b'}, | {"binary", required_argument, 0, 'b'}, | |||
{"cdb", no_argument, 0, 'c'}, | {"cdb", no_argument, 0, 'c'}, | |||
{"err", required_argument, 0, 'e'}, | {"err", required_argument, 0, 'e'}, | |||
{"exit-status", required_argument, 0, 'e'}, | {"exit-status", required_argument, 0, 'e'}, | |||
{"exit_status", required_argument, 0, 'e'}, | {"exit_status", required_argument, 0, 'e'}, | |||
{"file", required_argument, 0, 'f'}, | {"file", required_argument, 0, 'f'}, | |||
skipping to change at line 282 | skipping to change at line 282 | |||
s = fwrite(op->sense, 1, op->sense_len, fp); | s = fwrite(op->sense, 1, op->sense_len, fp); | |||
if ((int)s != op->sense_len) | if ((int)s != op->sense_len) | |||
pr2serr("only able to write %d of %d bytes to %s\n", (int)s, | pr2serr("only able to write %d of %d bytes to %s\n", (int)s, | |||
op->sense_len, op->wfname); | op->sense_len, op->wfname); | |||
} | } | |||
} | } | |||
int | int | |||
main(int argc, char *argv[]) | main(int argc, char *argv[]) | |||
{ | { | |||
int k, err; | int k, err, blen; | |||
int ret = 0; | int ret = 0; | |||
unsigned int ui; | unsigned int ui; | |||
size_t s; | size_t s; | |||
struct opts_t * op; | struct opts_t * op; | |||
FILE * fp = NULL; | FILE * fp = NULL; | |||
const char * cp; | const char * cp; | |||
char b[2048]; | char b[2048]; | |||
struct opts_t opts; | struct opts_t opts; | |||
op = &opts; | op = &opts; | |||
blen = sizeof(b); | ||||
memset(op, 0, sizeof(opts)); | memset(op, 0, sizeof(opts)); | |||
memset(b, 0, sizeof(b)); | memset(b, 0, blen); | |||
ret = parse_cmd_line(op, argc, argv); | ret = parse_cmd_line(op, argc, argv); | |||
#ifdef DEBUG | #ifdef DEBUG | |||
pr2serr("In DEBUG mode, "); | pr2serr("In DEBUG mode, "); | |||
if (op->verbose_given && op->version_given) { | if (op->verbose_given && op->version_given) { | |||
pr2serr("but override: '-vV' given, zero verbose and continue\n"); | pr2serr("but override: '-vV' given, zero verbose and continue\n"); | |||
op->verbose_given = false; | op->verbose_given = false; | |||
op->version_given = false; | op->version_given = false; | |||
op->verbose = 0; | op->verbose = 0; | |||
} else if (! op->verbose_given) { | } else if (! op->verbose_given) { | |||
skipping to change at line 339 | skipping to change at line 340 | |||
if (! sg_exit2str(op->es_val, op->verbose > 1, dlen, d)) | if (! sg_exit2str(op->es_val, op->verbose > 1, dlen, d)) | |||
snprintf(d, dlen, "Unable to decode exit status %d", op->es_val); | snprintf(d, dlen, "Unable to decode exit status %d", op->es_val); | |||
if (1 & op->verbose) /* odd values of verbose print to stderr */ | if (1 & op->verbose) /* odd values of verbose print to stderr */ | |||
pr2serr("%s\n", d); | pr2serr("%s\n", d); | |||
else /* even values of verbose (including not given) to stdout */ | else /* even values of verbose (including not given) to stdout */ | |||
printf("%s\n", d); | printf("%s\n", d); | |||
goto fini; | goto fini; | |||
} | } | |||
if (op->do_status) { | if (op->do_status) { | |||
sg_get_scsi_status_str(op->sstatus, sizeof(b) - 1, b); | sg_get_scsi_status_str(op->sstatus, blen, b); | |||
printf("SCSI status: %s\n", b); | printf("SCSI status: %s\n", b); | |||
} | } | |||
if ((0 == op->sense_len) && op->no_space_str) { | if ((0 == op->sense_len) && op->no_space_str) { | |||
if (op->verbose > 2) | if (op->verbose > 2) | |||
pr2serr("no_space str: %s\n", op->no_space_str); | pr2serr("no_space str: %s\n", op->no_space_str); | |||
cp = op->no_space_str; | cp = op->no_space_str; | |||
for (k = 0; isxdigit((uint8_t)cp[k]) && | for (k = 0; isxdigit((uint8_t)cp[k]) && | |||
isxdigit((uint8_t)cp[k + 1]); k += 2) { | isxdigit((uint8_t)cp[k + 1]); k += 2) { | |||
if (1 != sscanf(cp + k, "%2x", &ui)) { | if (1 != sscanf(cp + k, "%2x", &ui)) { | |||
skipping to change at line 421 | skipping to change at line 422 | |||
if (op->do_cdb) { | if (op->do_cdb) { | |||
int sa, opcode; | int sa, opcode; | |||
opcode = op->sense[0]; | opcode = op->sense[0]; | |||
if ((0x75 == opcode) || (0x7e == opcode) || (op->sense_len > 16)) | if ((0x75 == opcode) || (0x7e == opcode) || (op->sense_len > 16)) | |||
sa = sg_get_unaligned_be16(op->sense + 8); | sa = sg_get_unaligned_be16(op->sense + 8); | |||
else if (op->sense_len > 1) | else if (op->sense_len > 1) | |||
sa = op->sense[1] & 0x1f; | sa = op->sense[1] & 0x1f; | |||
else | else | |||
sa = 0; | sa = 0; | |||
sg_get_opcode_sa_name(opcode, sa, 0, sizeof(b), b); | sg_get_opcode_sa_name(opcode, sa, 0, blen, b); | |||
} else | } else | |||
sg_get_sense_str(NULL, op->sense, op->sense_len, | sg_get_sense_str(NULL, op->sense, op->sense_len, | |||
op->verbose, sizeof(b) - 1, b); | op->verbose, blen, b); | |||
printf("%s\n", b); | printf("%s\n", b); | |||
} | } | |||
fini: | fini: | |||
return ret; | return ret; | |||
} | } | |||
End of changes. 7 change blocks. | ||||
6 lines changed or deleted | 7 lines changed or added |