diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2015-12-20 16:23:44 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2015-12-20 16:23:44 +0000 |
commit | 9fbc884d5e7900d4edab95d18dc16d5ca8caa5b5 (patch) | |
tree | beedd798f77493980f389ccc4ef58a3489cfbbaf /src/sg_compare_and_write.c | |
parent | e359da1369caf436878cd05386b83b54359ecce1 (diff) | |
download | sg3_utils-9fbc884d5e7900d4edab95d18dc16d5ca8caa5b5.tar.gz |
rescan-scsi-bus.sh: updates from Suse; sg_lib: add 'sense' categories for SCSI statuses; pr2serr() rework; drop SUGGEST_*
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@654 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_compare_and_write.c')
-rw-r--r-- | src/sg_compare_and_write.c | 115 |
1 files changed, 53 insertions, 62 deletions
diff --git a/src/sg_compare_and_write.c b/src/sg_compare_and_write.c index 5e0b052d..e36a18ba 100644 --- a/src/sg_compare_and_write.c +++ b/src/sg_compare_and_write.c @@ -51,8 +51,9 @@ #include "sg_cmds_basic.h" #include "sg_pt.h" #include "sg_unaligned.h" +#include "sg_pr2serr.h" -static const char * version_str = "1.11 20151207"; +static const char * version_str = "1.13 20151219"; #define DEF_BLOCK_SIZE 512 #define DEF_NUM_BLOCKS (1) @@ -112,8 +113,7 @@ struct opts_t { static void usage() { - fprintf(stderr, "Usage: " - "sg_compare_and_write [--dpo] [--fua] [--fua_nv] " + pr2serr("Usage: sg_compare_and_write [--dpo] [--fua] [--fua_nv] " "[--group=GN] [--help]\n" " --in=IF [--inw=WF] --lba=LBA " "[--num=NUM]\n" @@ -204,8 +204,8 @@ parse_args(int argc, char* argv[], struct opts_t * op) op->flags.group = sg_get_num(optarg); if ((op->flags.group < 0) || (op->flags.group > 31)) { - fprintf(stderr, "argument to '--group' " - "expected to be 0 to 31\n"); + pr2serr("argument to '--group' expected to " + "be 0 to 31\n"); goto out_err_no_usage; } break; @@ -216,7 +216,7 @@ parse_args(int argc, char* argv[], struct opts_t * op) case 'l': ll = sg_get_llnum(optarg); if (-1 == ll) { - fprintf(stderr, "bad argument to '--lba'\n"); + pr2serr("bad argument to '--lba'\n"); goto out_err_no_usage; } op->lba = (uint64_t)ll; @@ -225,8 +225,8 @@ parse_args(int argc, char* argv[], struct opts_t * op) case 'n': op->numblocks = sg_get_num(optarg); if ((op->numblocks < 0) || (op->numblocks > 255)) { - fprintf(stderr, "bad argument to '--num', " - "expect 0 to 255\n"); + pr2serr("bad argument to '--num', expect 0 " + "to 255\n"); goto out_err_no_usage; } break; @@ -236,8 +236,7 @@ parse_args(int argc, char* argv[], struct opts_t * op) case 't': op->timeout = sg_get_num(optarg); if (op->timeout < 0) { - fprintf(stderr, "bad argument to " - "'--timeout'\n"); + pr2serr("bad argument to '--timeout'\n"); goto out_err_no_usage; } break; @@ -245,27 +244,25 @@ parse_args(int argc, char* argv[], struct opts_t * op) ++op->verbose; break; case 'V': - fprintf(stderr, ME "version: %s\n", version_str); + pr2serr(ME "version: %s\n", version_str); exit(0); case 'w': op->flags.wrprotect = sg_get_num(optarg); if (op->flags.wrprotect >> 3) { - fprintf(stderr, "bad argument to " - "'--wrprotect' not in range 0-7\n"); + pr2serr("bad argument to '--wrprotect' not " + "in range 0-7\n"); goto out_err_no_usage; } break; case 'x': op->xfer_len = sg_get_num(optarg); if (op->xfer_len < 0) { - fprintf(stderr, "bad argument to " - "'--xferlen'\n"); + pr2serr("bad argument to '--xferlen'\n"); goto out_err_no_usage; } break; default: - fprintf(stderr, "unrecognised option code 0x%x ??\n", - c); + pr2serr("unrecognised option code 0x%x ??\n", c); goto out_err; } } @@ -276,21 +273,21 @@ parse_args(int argc, char* argv[], struct opts_t * op) } if (optind < argc) { for (; optind < argc; ++optind) - fprintf(stderr, "Unexpected extra argument: " - "%s\n", argv[optind]); + pr2serr("Unexpected extra argument: %s\n", + argv[optind]); goto out_err; } } if (NULL == op->device_name) { - fprintf(stderr, "missing device name!\n"); + pr2serr("missing device name!\n"); goto out_err; } if (!if_given) { - fprintf(stderr, "missing input file\n"); + pr2serr("missing input file\n"); goto out_err; } if (!lba_given) { - fprintf(stderr, "missing lba\n"); + pr2serr("missing lba\n"); goto out_err; } if (0 == op->xfer_len) @@ -344,14 +341,13 @@ sg_compare_and_write(int sg_fd, unsigned char * buff, int blocks, uint64_t ull = 0; if (sg_build_scsi_cdb(cawCmd, blocks, lba, flags)) { - fprintf(stderr, ME "bad cdb build, lba=0x%" PRIx64 ", " - "blocks=%d\n", lba, blocks); + pr2serr(ME "bad cdb build, lba=0x%" PRIx64 ", blocks=%d\n", + lba, blocks); return -1; } ptvp = construct_scsi_pt_obj(); if (NULL == ptvp) { - fprintf(stderr, "Could not construct scsit_pt_obj, out of " - "memory\n"); + pr2serr("Could not construct scsit_pt_obj, out of memory\n"); return -1; } @@ -359,13 +355,13 @@ sg_compare_and_write(int sg_fd, unsigned char * buff, int blocks, set_scsi_pt_sense(ptvp, sense_b, sizeof(sense_b)); set_scsi_pt_data_out(ptvp, buff, xfer_len); if (verbose > 1) { - fprintf(stderr, " Compare and write cdb: "); + pr2serr(" Compare and write cdb: "); for (k = 0; k < COMPARE_AND_WRITE_CDB_SIZE; ++k) - fprintf(stderr, "%02x ", cawCmd[k]); - fprintf(stderr, "\n"); + pr2serr("%02x ", cawCmd[k]); + pr2serr("\n"); } if ((verbose > 2) && (xfer_len > 0)) { - fprintf(stderr, " Data-out buffer contents:\n"); + pr2serr(" Data-out buffer contents:\n"); dStrHexErr((const char *)buff, xfer_len, 1); } res = do_scsi_pt(ptvp, sg_fd, DEF_TIMEOUT_SECS, verbose); @@ -385,13 +381,11 @@ sg_compare_and_write(int sg_fd, unsigned char * buff, int blocks, valid = sg_get_sense_info_fld(sense_b, slen, &ull); if (valid) - fprintf(stderr, "Medium or hardware " - "error starting at lba=%" - PRIu64 " [0x%" PRIx64 "]\n", - ull, ull); + pr2serr("Medium or hardware error starting " + "at lba=%" PRIu64 " [0x%" PRIx64 + "]\n", ull, ull); else - fprintf(stderr, "Medium or hardware " - "error\n"); + pr2serr("Medium or hardware error\n"); ret = sense_cat; break; case SG_LIB_CAT_MISCOMPARE: @@ -401,11 +395,10 @@ sg_compare_and_write(int sg_fd, unsigned char * buff, int blocks, slen = get_scsi_pt_sense_len(ptvp); valid = sg_get_sense_info_fld(sense_b, slen, &ull); if (valid) - fprintf(stderr, "Miscompare at byte offset: %" - PRIu64 " [0x%" PRIx64 "]\n", ull, - ull); + pr2serr("Miscompare at byte offset: %" PRIu64 + " [0x%" PRIx64 "]\n", ull, ull); else - fprintf(stderr, "Miscompare reported\n"); + pr2serr("Miscompare reported\n"); break; default: ret = sense_cat; @@ -428,7 +421,7 @@ open_if(const char * fn, int got_stdin) else { fd = open(fn, O_RDONLY); if (fd < 0) { - fprintf(stderr, ME "open error: %s: %s\n", fn, + pr2serr(ME "open error: %s: %s\n", fn, safe_strerror(errno)); return -SG_LIB_FILE_ERROR; } @@ -445,7 +438,7 @@ open_dev(const char * outf, int verbose) { int sg_fd = sg_cmds_open_device(outf, 0 /* rw */, verbose); if (sg_fd < 0) { - fprintf(stderr, ME "open error: %s: %s\n", outf, + pr2serr(ME "open error: %s: %s\n", outf, safe_strerror(-sg_fd)); return -SG_LIB_FILE_ERROR; } @@ -469,19 +462,18 @@ main(int argc, char * argv[]) memset(op, 0, sizeof(opts)); res = parse_args(argc, argv, op); if (res != 0) { - fprintf(stderr, "Failed parsing args\n"); + pr2serr("Failed parsing args\n"); goto out; } if (op->verbose) { - fprintf(stderr, "Running COMPARE AND WRITE command with the " + pr2serr("Running COMPARE AND WRITE command with the " "following options:\n in=%s ", op->ifn); if (op->wfn_given) - fprintf(stderr, "inw=%s ", op->wfn); - fprintf(stderr, "device=%s\n lba=0x%" PRIx64 - " num_blocks=%d xfer_len=%d timeout=%d\n", - op->device_name, op->lba, op->numblocks, - op->xfer_len, op->timeout); + pr2serr("inw=%s ", op->wfn); + pr2serr("device=%s\n lba=0x%" PRIx64 " num_blocks=%d " + "xfer_len=%d timeout=%d\n", op->device_name, + op->lba, op->numblocks, op->xfer_len, op->timeout); } ifn_stdin = ((1 == strlen(op->ifn)) && ('-' == op->ifn[0])); infd = open_if(op->ifn, ifn_stdin); @@ -491,8 +483,7 @@ main(int argc, char * argv[]) } if (op->wfn_given) { if ((1 == strlen(op->wfn)) && ('-' == op->wfn[0])) { - fprintf(stderr, ME "don't allow stdin for write " - "file\n"); + pr2serr(ME "don't allow stdin for write file\n"); res = SG_LIB_FILE_ERROR; goto out; } @@ -511,7 +502,7 @@ main(int argc, char * argv[]) wrkBuff = (unsigned char *)malloc(op->xfer_len); if (0 == wrkBuff) { - fprintf(stderr, "Not enough user memory\n"); + pr2serr("Not enough user memory\n"); res = SG_LIB_CAT_OTHER; goto out; } @@ -520,30 +511,30 @@ main(int argc, char * argv[]) half_xlen = op->xfer_len / 2; res = read(infd, wrkBuff, half_xlen); if (res < 0) { - fprintf(stderr, "Could not read from %s", op->ifn); + pr2serr("Could not read from %s", op->ifn); goto out; } else if (res < half_xlen) { - fprintf(stderr, "Read only %d bytes (expected %d) " - "from %s\n", res, half_xlen, op->ifn); + pr2serr("Read only %d bytes (expected %d) from %s\n", + res, half_xlen, op->ifn); goto out; } res = read(wfd, wrkBuff + half_xlen, half_xlen); if (res < 0) { - fprintf(stderr, "Could not read from %s", op->wfn); + pr2serr("Could not read from %s", op->wfn); goto out; } else if (res < half_xlen) { - fprintf(stderr, "Read only %d bytes (expected %d) " - "from %s\n", res, half_xlen, op->wfn); + pr2serr("Read only %d bytes (expected %d) from %s\n", + res, half_xlen, op->wfn); goto out; } } else { res = read(infd, wrkBuff, op->xfer_len); if (res < 0) { - fprintf(stderr, "Could not read from %s", op->ifn); + pr2serr("Could not read from %s", op->ifn); goto out; } else if (res < op->xfer_len) { - fprintf(stderr, "Read only %d bytes (expected %d) " - "from %s\n", res, op->xfer_len, op->ifn); + pr2serr("Read only %d bytes (expected %d) from %s\n", + res, op->xfer_len, op->ifn); goto out; } } @@ -562,7 +553,7 @@ out: default: sg_get_category_sense_str(res, sizeof(b), b, op->verbose); - fprintf(stderr, ME "SCSI COMPARE AND WRITE: %s\n", b); + pr2serr(ME "SCSI COMPARE AND WRITE: %s\n", b); break; } } |