aboutsummaryrefslogtreecommitdiff
path: root/sg_requests.c
diff options
context:
space:
mode:
Diffstat (limited to 'sg_requests.c')
-rw-r--r--sg_requests.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/sg_requests.c b/sg_requests.c
index 1c5d5701..7b2f3493 100644
--- a/sg_requests.c
+++ b/sg_requests.c
@@ -44,7 +44,7 @@
* This program issues the SCSI command REQUEST SENSE to the given SCSI device.
*/
-static char * version_str = "1.11 20060315";
+static char * version_str = "1.13 20060623";
#define REQUEST_SENSE_BUFF_LEN 252
@@ -90,7 +90,7 @@ int main(int argc, char * argv[])
int do_time = 0;
int verbose = 0;
char device_name[256];
- int ret = 1;
+ int ret = 8;
struct timeval start_tm, end_tm;
memset(device_name, 0, sizeof device_name);
@@ -114,7 +114,7 @@ int main(int argc, char * argv[])
num_rs = sg_get_num(optarg);
if (num_rs < 1) {
fprintf(stderr, "bad argument to '--num'\n");
- return 1;
+ return SG_LIB_SYNTAX_ERROR;
}
break;
case 't':
@@ -129,7 +129,7 @@ int main(int argc, char * argv[])
default:
fprintf(stderr, "unrecognised switch code 0x%x ??\n", c);
usage();
- return 1;
+ return SG_LIB_SYNTAX_ERROR;
}
}
if (optind < argc) {
@@ -143,20 +143,20 @@ int main(int argc, char * argv[])
fprintf(stderr, "Unexpected extra argument: %s\n",
argv[optind]);
usage();
- return 1;
+ return SG_LIB_SYNTAX_ERROR;
}
}
if (0 == device_name[0]) {
fprintf(stderr, "missing device name!\n");
usage();
- return 1;
+ return SG_LIB_SYNTAX_ERROR;
}
sg_fd = sg_cmds_open_device(device_name, 1 /* ro */, verbose);
if (sg_fd < 0) {
fprintf(stderr, ME "open error: %s: %s\n", device_name,
safe_strerror(-sg_fd));
- return 1;
+ return SG_LIB_FILE_ERROR;
}
if (do_time) {
@@ -169,24 +169,24 @@ int main(int argc, char * argv[])
memset(requestSenseBuff, 0x0, sizeof(requestSenseBuff));
res = sg_ll_request_sense(sg_fd, desc, requestSenseBuff,
sizeof(requestSenseBuff), 1, verbose);
+ ret = res;
if (0 == res) {
if (1 == num_rs) {
resp_len = requestSenseBuff[7] + 8;
- fprintf(stderr, "Decode response as sense data:\n");
+ fprintf(stderr, "Decode parameter data as sense data:\n");
sg_print_sense(NULL, requestSenseBuff, resp_len, 0);
if (verbose) {
- fprintf(stderr, "\nOutput response in hex\n");
+ fprintf(stderr, "\nParameter data in hex\n");
dStrHex((const char *)requestSenseBuff, resp_len, 1);
}
}
- ret = 0;
continue;
} else if (SG_LIB_CAT_INVALID_OP == res)
fprintf(stderr, "Request Sense command not supported\n");
else if (SG_LIB_CAT_ILLEGAL_REQ == res)
fprintf(stderr, "bad field in Request Sense cdb\n");
else {
- fprintf(stderr, "Request Sense command failed\n");
+ fprintf(stderr, "Request Sense command unexpectedly failed\n");
if (0 == verbose)
fprintf(stderr, " try the '-v' option for "
"more information\n");
@@ -216,8 +216,9 @@ int main(int argc, char * argv[])
}
res = sg_cmds_close_device(sg_fd);
if (res < 0) {
- fprintf(stderr, ME "close error: %s\n", safe_strerror(-res));
- return 1;
+ fprintf(stderr, "close error: %s\n", safe_strerror(-res));
+ if (0 == ret)
+ return SG_LIB_FILE_ERROR;
}
- return ret;
+ return (ret >= 0) ? ret : SG_LIB_CAT_OTHER;
}