aboutsummaryrefslogtreecommitdiff
path: root/src/sg_write_buffer.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_write_buffer.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_write_buffer.c')
-rw-r--r--src/sg_write_buffer.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/sg_write_buffer.c b/src/sg_write_buffer.c
index e50d7a4d..4591c1a4 100644
--- a/src/sg_write_buffer.c
+++ b/src/sg_write_buffer.c
@@ -13,6 +13,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <ctype.h>
+#include <errno.h>
#include <string.h>
#include <getopt.h>
#define __STDC_FORMAT_MACROS 1
@@ -37,7 +38,7 @@
* This utility issues the SCSI WRITE BUFFER command to the given device.
*/
-static const char * version_str = "1.25 20180217"; /* spc5r19 */
+static const char * version_str = "1.26 20180515"; /* spc5r19 */
#define ME "sg_write_buffer: "
#define DEF_XFER_LEN (8 * 1024 * 1024)
@@ -193,7 +194,8 @@ main(int argc, char * argv[])
bool dry_run = false;
bool got_stdin = false;
bool wb_len_given = false;
- int sg_fd, infd, res, c, len, k, n;
+ int infd, res, c, len, k, n;
+ int sg_fd = -1;
int bpw = 0;
int do_help = 0;
int ret = 0;
@@ -369,9 +371,11 @@ main(int argc, char * argv[])
sg_fd = sg_cmds_open_device(device_name, false /* rw */, verbose);
if (sg_fd < 0) {
- pr2serr(ME "open error: %s: %s\n", device_name,
- safe_strerror(-sg_fd));
- return SG_LIB_FILE_ERROR;
+ if (verbose)
+ pr2serr(ME "open error: %s: %s\n", device_name,
+ safe_strerror(-sg_fd));
+ ret = sg_convert_errno(-sg_fd);
+ goto err_out;
}
if (file_name || (wb_len > 0)) {
if (0 == wb_len)
@@ -379,7 +383,7 @@ main(int argc, char * argv[])
dop = sg_memalign(wb_len, 0, &free_dop, false);
if (NULL == dop) {
pr2serr(ME "out of memory\n");
- ret = SG_LIB_SYNTAX_ERROR;
+ ret = sg_convert_errno(ENOMEM);
goto err_out;
}
memset(dop, 0xff, wb_len);
@@ -509,11 +513,18 @@ main(int argc, char * argv[])
err_out:
if (free_dop)
free(free_dop);
- res = sg_cmds_close_device(sg_fd);
- if (res < 0) {
- pr2serr("close error: %s\n", safe_strerror(-res));
- if (0 == ret)
- return SG_LIB_FILE_ERROR;
+ if (sg_fd >= 0) {
+ res = sg_cmds_close_device(sg_fd);
+ if (res < 0) {
+ pr2serr("close error: %s\n", safe_strerror(-res));
+ if (0 == ret)
+ ret = sg_convert_errno(-res);
+ }
+ }
+ if (0 == verbose) {
+ if (! sg_if_can2stderr("sg_write_buffer failed: ", ret))
+ pr2serr("Some error occurred, try again with '-v' "
+ "or '-vv' for more information\n");
}
return (ret >= 0) ? ret : SG_LIB_CAT_OTHER;
}