diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2018-06-29 09:46:13 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2018-06-29 09:46:13 +0000 |
commit | 3ef8550a26c95c97f9fdc4ef249a5767fd573e7a (patch) | |
tree | ae1e82f2ff36a06a02184a3eeb19cffe217fcb2f /src/sgp_dd.c | |
parent | 11f6f1f439415e57696f473b1475f190018741c7 (diff) | |
download | sg3_utils-3ef8550a26c95c97f9fdc4ef249a5767fd573e7a.tar.gz |
sg_opcode: support MLU, Multiple Logical Units (18-045r1); sg_lib: sg_simple_inquiry_pt(); ./configure: option --enable-debug added for testing
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@779 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sgp_dd.c')
-rw-r--r-- | src/sgp_dd.c | 58 |
1 files changed, 43 insertions, 15 deletions
diff --git a/src/sgp_dd.c b/src/sgp_dd.c index 55df3df7..bf8dfb82 100644 --- a/src/sgp_dd.c +++ b/src/sgp_dd.c @@ -60,7 +60,7 @@ #include "sg_pr2serr.h" -static const char * version_str = "5.65 20180601"; +static const char * version_str = "5.67 20180627"; #define DEF_BLOCK_SIZE 512 #define DEF_BLOCKS_PER_TRANSFER 128 @@ -69,8 +69,6 @@ static const char * version_str = "5.65 20180601"; #define MAX_SCSI_CDBSZ 16 -/* #define SG_DEBUG */ - #define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ #define READ_CAP_REPLY_LEN 8 #define RCAP16_REPLY_LEN 32 @@ -1154,6 +1152,8 @@ num_chs_in_str(const char * s, int slen, int ch) int main(int argc, char * argv[]) { + bool verbose_given = false; + bool version_given = false; int64_t skip = 0; int64_t seek = 0; int ibs = 0; @@ -1305,13 +1305,15 @@ main(int argc, char * argv[]) return 0; } n = num_chs_in_str(key + 1, keylen - 1, 'v'); + if (n > 0) + verbose_given = true; rcoll.debug += n; /* -v ---> --verbose */ res += n; n = num_chs_in_str(key + 1, keylen - 1, 'V'); - if (n > 0) { - pr2serr("%s%s\n", my_name, version_str); - return 0; - } + if (n > 0) + version_given = true; + res += n; + if (res < (keylen - 1)) { pr2serr("Unrecognised short option in '%s', try '--help'\n", key); @@ -1324,17 +1326,39 @@ main(int argc, char * argv[]) (0 == strcmp(key, "-?"))) { usage(); return 0; - } else if (0 == strncmp(key, "--verb", 6)) + } else if (0 == strncmp(key, "--verb", 6)) { + verbose_given = true; ++rcoll.debug; /* --verbose */ - else if (0 == strncmp(key, "--vers", 6)) { - pr2serr("%s%s\n", my_name, version_str); - return 0; - } else { + } else if (0 == strncmp(key, "--vers", 6)) + version_given = true; + else { pr2serr("Unrecognized option '%s'\n", key); pr2serr("For more information use '--help'\n"); return SG_LIB_SYNTAX_ERROR; } } + +#ifdef DEBUG + pr2serr("In DEBUG mode, "); + if (verbose_given && version_given) { + pr2serr("but override: '-vV' given, zero verbose and continue\n"); + verbose_given = false; + version_given = false; + rcoll.debug = 0; + } else if (! verbose_given) { + pr2serr("set '-vv'\n"); + rcoll.debug = 2; + } else + pr2serr("keep verbose=%d\n", rcoll.debug); +#else + if (verbose_given && version_given) + pr2serr("Not in DEBUG mode, so '-vV' has no special action\n"); +#endif + if (version_given) { + pr2serr("%s%s\n", my_name, version_str); + return 0; + } + if (rcoll.bs <= 0) { rcoll.bs = DEF_BLOCK_SIZE; pr2serr("Assume default 'bs' (block size) of %d bytes\n", rcoll.bs); @@ -1680,7 +1704,7 @@ main(int argc, char * argv[]) if (rcoll.debug) pr2serr("Worker thread k=%d terminated\n", k); } - } + } /* started worker threads and here after they have all exited */ if (do_time && (start_tm.tv_sec || start_tm.tv_usec)) calc_duration_throughput(0); @@ -1704,15 +1728,19 @@ main(int argc, char * argv[]) /* Android doesn't have pthread_cancel() so use pthread_kill() instead. * Also there is no need to link with -lpthread in Android */ status = pthread_kill(sig_listen_thread_id, SIGUSR1); + if (0 != status) err_exit(status, "pthread_kill"); #else status = pthread_cancel(sig_listen_thread_id); -#endif if (0 != status) err_exit(status, "pthread_cancel"); -#endif /* 0 */ +#endif +#endif /* 0, because always do pthread_kill() next */ shutting_down = true; status = pthread_kill(sig_listen_thread_id, SIGINT); if (0 != status) err_exit(status, "pthread_kill"); + /* valgrind says the above _kill() leaks; web says it needs a following + * _join() to clear heap taken by associated _create() */ + fini: if (STDIN_FILENO != rcoll.infd) close(rcoll.infd); |