diff options
Diffstat (limited to 'sg_requests.c')
-rw-r--r-- | sg_requests.c | 29 |
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; } |