aboutsummaryrefslogtreecommitdiff
path: root/src/sg_start.c
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2018-05-15 20:44:45 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2018-05-15 20:44:45 +0000
commit856fb91355bddbe7a15a9d11334c354d8ee7b6d3 (patch)
tree9446f14be2d17b1f0449a466e0762a9a3361ca7b /src/sg_start.c
parent71e56cc16387a76971a04fda4ff9306ec704daf9 (diff)
downloadsg3_utils-856fb91355bddbe7a15a9d11334c354d8ee7b6d3.tar.gz
cleanup of error messages around sg_cmds_open_device(); add flock error msg for ddpt
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@772 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_start.c')
-rw-r--r--src/sg_start.c55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/sg_start.c b/src/sg_start.c
index 8fee166e..28f22f20 100644
--- a/src/sg_start.c
+++ b/src/sg_start.c
@@ -34,7 +34,7 @@
#include "sg_pr2serr.h"
-static const char * version_str = "0.64 20180302"; /* sbc3r14; mmc6r01a */
+static const char * version_str = "0.65 20180513"; /* sbc3r14; mmc6r01a */
static struct option long_options[] = {
{"eject", no_argument, 0, 'e'},
@@ -71,7 +71,7 @@ struct opts_t {
int do_help;
int do_mod;
int do_pc;
- int do_verbose;
+ int verbose;
const char * device_name;
};
@@ -247,7 +247,7 @@ news_parse_cmd_line(struct opts_t * op, int argc, char * argv[])
op->do_stop = true;
break;
case 'v':
- ++op->do_verbose;
+ ++op->verbose;
break;
case 'V':
op->do_version = true;
@@ -315,7 +315,7 @@ old_parse_cmd_line(struct opts_t * op, int argc, char * argv[])
op->do_readonly = true;
break;
case 'v':
- ++op->do_verbose;
+ ++op->verbose;
break;
case 'V':
op->do_version = true;
@@ -482,7 +482,8 @@ parse_cmd_line(struct opts_t * op, int argc, char * argv[])
int
main(int argc, char * argv[])
{
- int fd, res;
+ int res;
+ int sg_fd = -1;
int ret = 0;
struct opts_t opts;
struct opts_t * op;
@@ -545,39 +546,49 @@ main(int argc, char * argv[])
}
}
- fd = sg_cmds_open_device(op->device_name, op->do_readonly,
- op->do_verbose);
- if (fd < 0) {
- pr2serr("Error trying to open %s: %s\n", op->device_name,
- safe_strerror(-fd));
- return SG_LIB_FILE_ERROR;
+ sg_fd = sg_cmds_open_device(op->device_name, op->do_readonly,
+ op->verbose);
+ if (sg_fd < 0) {
+ if (op->verbose)
+ pr2serr("Error trying to open %s: %s\n", op->device_name,
+ safe_strerror(-sg_fd));
+ ret = sg_convert_errno(-sg_fd);
+ goto fini;
}
if (op->do_fl >= 0)
- res = sg_ll_start_stop_unit(fd, op->do_immed, op->do_fl, 0 /* pc */,
+ res = sg_ll_start_stop_unit(sg_fd, op->do_immed, op->do_fl, 0 /* pc */,
true /* fl */, true /* loej */,
true /*start */, true /* noisy */,
- op->do_verbose);
+ op->verbose);
else if (op->do_pc > 0)
- res = sg_ll_start_stop_unit(fd, op->do_immed, op->do_mod,
+ res = sg_ll_start_stop_unit(sg_fd, op->do_immed, op->do_mod,
op->do_pc, op->do_noflush, false, false,
- true, op->do_verbose);
+ true, op->verbose);
else
- res = sg_ll_start_stop_unit(fd, op->do_immed, 0, false,
+ res = sg_ll_start_stop_unit(sg_fd, op->do_immed, 0, false,
op->do_noflush, op->do_loej,
- op->do_start, true, op->do_verbose);
+ op->do_start, true, op->verbose);
ret = res;
if (res) {
- if (op->do_verbose < 2) {
+ if (op->verbose < 2) {
char b[80];
- sg_get_category_sense_str(res, sizeof(b), b, op->do_verbose);
+ sg_get_category_sense_str(res, sizeof(b), b, op->verbose);
pr2serr("%s\n", b);
}
pr2serr("START STOP UNIT command failed\n");
}
- res = sg_cmds_close_device(fd);
- if ((res < 0) && (0 == ret))
- return SG_LIB_FILE_ERROR;
+fini:
+ if (sg_fd >= 0) {
+ res = sg_cmds_close_device(sg_fd);
+ if (0 == ret)
+ ret = sg_convert_errno(-res);
+ }
+ if (0 == op->verbose) {
+ if (! sg_if_can2stderr("sg_start failed: ", ret))
+ pr2serr("Some error occurred, try again with '-v' "
+ "or '-vv' for more information\n");
+ }
return (ret >= 0) ? ret : SG_LIB_CAT_OTHER;
}