"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/sg_decode_sense.c" between
sg3_utils-1.47r908.tgz and sg3_utils-1.47r915.tar.xz

About: sg3_utils contains utilities that send SCSI commands to devices. Beta version.

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

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)