aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2013-11-26 01:14:16 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2013-11-26 01:14:16 +0000
commit6fd53a9c043f14b4fe0ec87fbc8371cbecfd429d (patch)
tree93485ef1deb1952b3491678646e5dd7a774e444f
parent87f287cceb05f5f41ba1ceee1c0fb9f7e5d561be (diff)
downloadsg3_utils-6fd53a9c043f14b4fe0ec87fbc8371cbecfd429d.tar.gz
sg_ses: error and warning message cleanup; sg_raw: fix compiler warning
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@534 6180dd3e-e324-4e3e-922d-17de1ae2f315
-rw-r--r--ChangeLog3
-rw-r--r--README2
-rw-r--r--debian/changelog2
-rw-r--r--doc/sg_ses.83
-rw-r--r--sg3_utils.spec2
-rw-r--r--src/sg_raw.c38
-rw-r--r--src/sg_ses.c489
7 files changed, 266 insertions, 273 deletions
diff --git a/ChangeLog b/ChangeLog
index 0c27f364..d6fed961 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,8 +2,9 @@ Each utility has its own version number, date of last change and
some description at the top of its ".c" file. All utilities in the main
directory have their own "man" pages. There is also a sg3_utils man page.
-Changelog for sg3_utils-1.38 [20131119] [svn: r533]
+Changelog for sg3_utils-1.38 [20131125] [svn: r534]
- sg_ses: add --dev-slot-num= and --sas-addr=
+ - error and warning message cleanup
- sg_inq: add --block=0|1 option to control opens
- sg_luns: guard against garbage response
- sg_lib_data: sync asc/ascq codes with T10 dated 20131110
diff --git a/README b/README
index d0fe7bd5..628a025a 100644
--- a/README
+++ b/README
@@ -401,4 +401,4 @@ See http://sg.danny.cz/sg/tools.html
Douglas Gilbert
-19th November 2013
+25th November 2013
diff --git a/debian/changelog b/debian/changelog
index e97c5e05..47e00033 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,7 @@ sg3-utils (1.38-0.1) unstable; urgency=low
* New upstream version
- -- Douglas Gilbert <dgilbert@interlog.com> Tue, 19 Nov 2013 11:00:00 -0500
+ -- Douglas Gilbert <dgilbert@interlog.com> Mon, 25 Nov 2013 19:00:00 -0500
sg3-utils (1.37-0.1) unstable; urgency=low
diff --git a/doc/sg_ses.8 b/doc/sg_ses.8
index 50d25ac4..90f9e8a5 100644
--- a/doc/sg_ses.8
+++ b/doc/sg_ses.8
@@ -181,7 +181,8 @@ ignored. See the SETTING SUBENCLOSURE NICKNAME section below.
.TP
\fB\-N\fR, \fB\-\-nickid\fR=\fISEID\fR
where \fISEID\fR is the Subenclosure identifier that the new
-Nickname (\fISEN\fR) will be applied to. The default value is 0 which is the
+Nickname (\fISEN\fR) will be applied to. So \fISEID\fR must be an existing
+Subenclosure identifier. The default value is 0 which is the
main enclosure.
.TP
\fB\-p\fR, \fB\-\-page\fR=\fIPG\fR
diff --git a/sg3_utils.spec b/sg3_utils.spec
index 67e9aaee..3e195b4e 100644
--- a/sg3_utils.spec
+++ b/sg3_utils.spec
@@ -79,7 +79,7 @@ fi
%{_libdir}/*.la
%changelog
-* Tue Nov 19 2013 - dgilbert at interlog dot com
+* Mon Nov 25 2013 - dgilbert at interlog dot com
- track t10 changes
* sg3_utils-1.38
diff --git a/src/sg_raw.c b/src/sg_raw.c
index 174a158b..ce6ed7f3 100644
--- a/src/sg_raw.c
+++ b/src/sg_raw.c
@@ -25,7 +25,7 @@
#include "sg_lib.h"
#include "sg_pt.h"
-#define SG_RAW_VERSION "0.4.6 (2013-10-13)"
+#define SG_RAW_VERSION "0.4.7 (2013-11-24)"
#ifdef SG_LIB_WIN32
#ifndef HAVE_SYSCONF
@@ -248,7 +248,6 @@ process_cl(struct opts_t *optsp, int argc, char *argv[])
static unsigned char *
my_memalign(int length, unsigned char ** wrkBuffp)
{
- unsigned char * wrkBuff;
size_t psz;
#if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
@@ -262,28 +261,33 @@ my_memalign(int length, unsigned char ** wrkBuffp)
#ifdef HAVE_POSIX_MEMALIGN
{
int err;
+ void * wp = NULL;
- err = posix_memalign((void **)&wrkBuff, psz, length);
- if (err) {
- fprintf(stderr, "posix_memalign: error [%d] out of memory?\n",
+ err = posix_memalign(&wp, psz, length);
+ if (err || (NULL == wp)) {
+ fprintf(stderr, "posix_memalign: error [%d], out of memory?\n",
err);
return NULL;
}
- memset(wrkBuff, 0, length);
+ memset(wp, 0, length);
if (wrkBuffp)
- *wrkBuffp = wrkBuff;
- return wrkBuff;
+ *wrkBuffp = (unsigned char *)wp;
+ return (unsigned char *)wp;
}
#else
- wrkBuff = (unsigned char*)calloc(length + psz, 1);
- if (NULL == wrkBuff) {
- if (wrkBuffp)
- *wrkBuffp = NULL;
- return NULL;
- } else if (wrkBuffp)
- *wrkBuffp = wrkBuff;
- return (unsigned char *)(((unsigned long)wrkBuff + psz - 1) &
- (~(psz - 1)));
+ {
+ unsigned char * wrkBuff;
+
+ wrkBuff = (unsigned char*)calloc(length + psz, 1);
+ if (NULL == wrkBuff) {
+ if (wrkBuffp)
+ *wrkBuffp = NULL;
+ return NULL;
+ } else if (wrkBuffp)
+ *wrkBuffp = wrkBuff;
+ return (unsigned char *)(((unsigned long)wrkBuff + psz - 1) &
+ (~(psz - 1)));
+ }
#endif
}
diff --git a/src/sg_ses.c b/src/sg_ses.c
index 5f553227..c2063e61 100644
--- a/src/sg_ses.c
+++ b/src/sg_ses.c
@@ -9,6 +9,7 @@
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include <getopt.h>
@@ -27,7 +28,7 @@
* commands tailored for SES (enclosure) devices.
*/
-static const char * version_str = "1.80 20131106"; /* ses3r06 */
+static const char * version_str = "1.81 20131125"; /* ses3r06 */
#define MX_ALLOC_LEN ((64 * 1024) - 1) /* max allowable for big enclosures */
#define MX_ELEM_HDR 1024
@@ -111,6 +112,7 @@ struct opts_t {
int do_join;
int do_list;
int seid;
+ int seid_given;
int page_code;
int page_code_given;
int do_raw;
@@ -125,7 +127,7 @@ struct opts_t {
const char * desc_name;
const char * get_str;
const char * set_str;
- const char * device_name;
+ const char * dev_name;
const char * index_str;
const char * nickname_str;
const struct element_type_t * ind_etp;
@@ -493,12 +495,31 @@ static void enumerate_diag_pages(void);
static int saddr_non_zero(const unsigned char * ucp);
+#ifdef __GNUC__
+static int pr2serr(const char * fmt, ...)
+ __attribute__ ((format (printf, 1, 2)));
+#else
+static int pr2serr(const char * fmt, ...);
+#endif
+
+static int
+pr2serr(const char * fmt, ...)
+{
+ va_list args;
+ int n;
+
+ va_start(args, fmt);
+ n = vfprintf(stderr, fmt, args);
+ va_end(args);
+ return n;
+}
+
static void
usage(int help_num)
{
if (1 == help_num) {
- fprintf(stderr, "Usage: "
+ pr2serr("Usage: "
"sg_ses [--byte1=B1] [--clear=STR] [--control] [--data=H,H...]\n"
" [--descriptor=DN] [--dev-slot-num=SN] "
"[--enumerate]\n"
@@ -537,7 +558,7 @@ usage(int help_num)
" II is individual index ('-1' "
"for overall)\n"
);
- fprintf(stderr,
+ pr2serr(
" --join|-j group Enclosure Status, Element "
"Descriptor\n"
" and Additional Element Status pages. "
@@ -554,7 +575,7 @@ usage(int help_num)
"Fetches status or sends control data to a SCSI enclosure. Use "
"'-hh' for\nmore help, including the options not shown here.\n");
} else { /* for '-hh' or '--help --help' */
- fprintf(stderr,
+ pr2serr(
" where the remaining sg_ses options are:\n"
" --byte1=B1|-b B1 byte 1 (2nd byte) of control page set "
"to B1\n"
@@ -571,6 +592,8 @@ usage(int help_num)
" --nickname=SEN|-n SEN SEN is new subenclosure nickname\n"
" --nickid=SEID|-N SEID SEID is subenclosure identifier "
"(def: 0)\n"
+ " used to specify which nickname to "
+ "change\n"
" --raw|-r print status page in ASCII hex suitable "
"for '-d';\n"
" when used twice outputs page in binary "
@@ -585,7 +608,7 @@ usage(int help_num)
"type\nabbreviations may be followed by a number (e.g. 'ps1' "
"is the second\npower supply element type).\n\n"
);
- fprintf(stderr,
+ pr2serr(
"Low level indexing can be done with one of the two '--index=' "
"options.\nAlternatively, medium level indexing can be done "
"with either the\n'--descriptor=', 'dev-slot-num=' or "
@@ -614,23 +637,22 @@ parse_index(struct opts_t *op)
else {
n = sg_get_num(cp + 1);
if ((n < 0) || (n > 255)) {
- fprintf(stderr, "bad argument to '--index', after "
- "comma expect number from -1 to 255\n");
+ pr2serr("bad argument to '--index', after comma expect "
+ "number from -1 to 255\n");
return SG_LIB_SYNTAX_ERROR;
}
}
op->ind_indiv = n;
n = cp - op->index_str;
if (n >= (int)sizeof(b)) {
- fprintf(stderr, "bad argument to '--index', string "
- "prior to comma too long\n");
+ pr2serr("bad argument to '--index', string prior to comma too "
+ "long\n");
return SG_LIB_SYNTAX_ERROR;
}
} else {
n = strlen(op->index_str);
if (n >= (int)sizeof(b)) {
- fprintf(stderr, "bad argument to '--index', string "
- "too long\n");
+ pr2serr("bad argument to '--index', string too long\n");
return SG_LIB_SYNTAX_ERROR;
}
}
@@ -638,8 +660,8 @@ parse_index(struct opts_t *op)
b[n] = '\0';
if (0 == strcmp("-1", b)) {
if (cp) {
- fprintf(stderr, "bad argument to '--index', "
- "unexpected '-1' type header index\n");
+ pr2serr("bad argument to '--index', unexpected '-1' type header "
+ "index\n");
return SG_LIB_SYNTAX_ERROR;
}
op->ind_th = 0;
@@ -647,8 +669,8 @@ parse_index(struct opts_t *op)
} else if (isdigit(b[0])) {
n = sg_get_num(b);
if ((n < 0) || (n > 255)) {
- fprintf(stderr, "bad numeric argument to '--index', "
- "expect number from 0 to 255\n");
+ pr2serr("bad numeric argument to '--index', expect number from 0 "
+ "to 255\n");
return SG_LIB_SYNTAX_ERROR;
}
if (cp)
@@ -662,8 +684,8 @@ parse_index(struct opts_t *op)
*c2p = '\0';
n = sg_get_num(b + 1);
if ((n < 0) || (n > 255)) {
- fprintf(stderr, "bad element type code for '--index', "
- "expect value from 0 to 255\n");
+ pr2serr("bad element type code for '--index', expect value from "
+ "0 to 255\n");
return SG_LIB_SYNTAX_ERROR;
}
element_type_by_code.elem_type_code = n;
@@ -674,8 +696,8 @@ parse_index(struct opts_t *op)
if (c2p) {
n = sg_get_num(c2p + 1);
if ((n < 0) || (n > 255)) {
- fprintf(stderr, "bad element type code <num> "
- "for '--index', expect <num> from 0 to 255\n");
+ pr2serr("bad element type code <num> for '--index', expect "
+ "<num> from 0 to 255\n");
return SG_LIB_SYNTAX_ERROR;
}
op->ind_et_inst = n;
@@ -690,15 +712,15 @@ parse_index(struct opts_t *op)
break;
}
if (NULL == etp->desc) {
- fprintf(stderr, "bad element type abbreviation [%s] for "
- "'--index'\nuse '--enumerate' to see possibles\n", b);
+ pr2serr("bad element type abbreviation [%s] for '--index'\n"
+ "use '--enumerate' to see possibles\n", b);
return SG_LIB_SYNTAX_ERROR;
}
if ((int)strlen(b) > n) {
n = sg_get_num(b + n);
if ((n < 0) || (n > 255)) {
- fprintf(stderr, "bad element type abbreviation <num> "
- "for '--index', expect <num> from 0 to 255\n");
+ pr2serr("bad element type abbreviation <num> for '--index', "
+ "expect <num> from 0 to 255\n");
return SG_LIB_SYNTAX_ERROR;
}
op->ind_et_inst = n;
@@ -709,12 +731,12 @@ parse_index(struct opts_t *op)
}
if (op->verbose > 1) {
if (op->ind_etp)
- fprintf(stderr, " element type abbreviation: %s, etp_num=%d, "
+ pr2serr(" element type abbreviation: %s, etp_num=%d, "
"individual index=%d\n", op->ind_etp->abbrev,
op->ind_et_inst, op->ind_indiv);
else
- fprintf(stderr, " type header index=%d, individual "
- "index=%d\n", op->ind_th, op->ind_indiv);
+ pr2serr(" type header index=%d, individual index=%d\n",
+ op->ind_th, op->ind_indiv);
}
return 0;
}
@@ -743,7 +765,7 @@ cl_process(struct opts_t *op, int argc, char *argv[])
if ((strlen(optarg) > 2) && ('X' == toupper(optarg[1])))
cp = optarg + 2;
if (1 != sscanf(cp, "%" SCNx64 "", &saddr)) {
- fprintf(stderr, "bad argument to '--sas-addr'\n");
+ pr2serr("bad argument to '--sas-addr'\n");
return SG_LIB_SYNTAX_ERROR;
}
for (j = 7, ff = 1; j >= 0; --j) {
@@ -753,16 +775,14 @@ cl_process(struct opts_t *op, int argc, char *argv[])
saddr >>= 8;
}
if (ff) {
- fprintf(stderr, "decode error from argument to "
- "'--sas-addr'\n");
+ pr2serr("decode error from argument to '--sas-addr'\n");
return SG_LIB_SYNTAX_ERROR;
}
break;
case 'b':
op->byte1 = sg_get_num(optarg);
if ((op->byte1 < 0) || (op->byte1 > 255)) {
- fprintf(stderr, "bad argument to '--byte1' (0 to 255 "
- "inclusive)\n");
+ pr2serr("bad argument to '--byte1' (0 to 255 inclusive)\n");
return SG_LIB_SYNTAX_ERROR;
}
++op->byte1_given;
@@ -777,7 +797,7 @@ cl_process(struct opts_t *op, int argc, char *argv[])
case 'd':
memset(op->data_arr, 0, sizeof(op->data_arr));
if (read_hex(optarg, op->data_arr + 4, &op->arr_len)) {
- fprintf(stderr, "bad argument to '--data'\n");
+ pr2serr("bad argument to '--data'\n");
return SG_LIB_SYNTAX_ERROR;
}
op->do_data = 1;
@@ -820,16 +840,16 @@ cl_process(struct opts_t *op, int argc, char *argv[])
case 'N':
op->seid = sg_get_num(optarg);
if ((op->seid < 0) || (op->seid > 255)) {
- fprintf(stderr, "bad argument to '--nick_id' (0 to 255 "
- "inclusive)\n");
+ pr2serr("bad argument to '--nick_id' (0 to 255 inclusive)\n");
return SG_LIB_SYNTAX_ERROR;
}
+ ++op->seid_given;
break;
case 'p':
if (isdigit(optarg[0])) {
op->page_code = sg_get_num(optarg);
if ((op->page_code < 0) || (op->page_code > 255)) {
- fprintf(stderr, "bad argument to '--page' (0 to 255 "
+ pr2serr("bad argument to '--page' (0 to 255 "
"inclusive)\n");
return SG_LIB_SYNTAX_ERROR;
}
@@ -843,8 +863,8 @@ cl_process(struct opts_t *op, int argc, char *argv[])
}
}
if (NULL == ap->abbrev) {
- fprintf(stderr, "'--page' abbreviation %s not "
- "found\nHere are the choices:\n", optarg);
+ pr2serr("'--page' abbreviation %s not found\nHere are "
+ "the choices:\n", optarg);
enumerate_diag_pages();
return SG_LIB_SYNTAX_ERROR;
}
@@ -870,62 +890,54 @@ cl_process(struct opts_t *op, int argc, char *argv[])
case 'x':
op->dev_slot_num = sg_get_num(optarg);
if ((op->dev_slot_num < 0) || (op->dev_slot_num > 255)) {
- fprintf(stderr, "bad argument to '--dev-slot-num' (0 to 255 "
+ pr2serr("bad argument to '--dev-slot-num' (0 to 255 "
"inclusive)\n");
return SG_LIB_SYNTAX_ERROR;
}
break;
default:
- fprintf(stderr, "unrecognised option code 0x%x ??\n", c);
- fprintf(stderr, " For command line usage information use the "
- "'--help' option\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("unrecognised option code 0x%x ??\n", c);
+ goto err_help;
}
}
if (op->do_help)
return 0;
if (optind < argc) {
- if (NULL == op->device_name) {
- op->device_name = argv[optind];
+ if (NULL == op->dev_name) {
+ op->dev_name = argv[optind];
++optind;
}
if (optind < argc) {
for (; optind < argc; ++optind)
- fprintf(stderr, "Unexpected extra argument: %s\n",
- argv[optind]);
- fprintf(stderr, " For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("Unexpected extra argument: %s\n", argv[optind]);
+ goto err_help;
}
}
if (op->do_join && (op->do_control)) {
- fprintf(stderr, "cannot have '--join' and '--control'\n");
- fprintf(stderr, " For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("cannot have '--join' and '--control'\n");
+ goto err_help;
}
if (op->num_cgs > 1) {
- fprintf(stderr, "can only be one of '--clear', '--get' and "
- "'--set'\n");
- fprintf(stderr, " For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("can only be one of '--clear', '--get' and '--set'\n");
+ goto err_help;
}
if (op->index_str) {
ret = parse_index(op);
if (ret) {
- fprintf(stderr, " For more information use '--help'\n");
+ pr2serr(" For more information use '--help'\n");
return ret;
}
}
if (op->desc_name || (op->dev_slot_num >= 0) ||
saddr_non_zero(op->sas_addr)) {
if (op->ind_given) {
- fprintf(stderr, "cannot have --index with either --descriptor, "
+ pr2serr("cannot have --index with either --descriptor, "
"--dev-slot-num or --sas-addr\n");
- fprintf(stderr, " For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ goto err_help;
}
if (((!! op->desc_name) + (op->dev_slot_num >= 0) +
saddr_non_zero(op->sas_addr)) > 1) {
- fprintf(stderr, "can only have one of --descriptor, "
+ pr2serr("can only have one of --descriptor, "
"--dev-slot-num and --sas-addr\n");
return SG_LIB_SYNTAX_ERROR;
}
@@ -933,7 +945,7 @@ cl_process(struct opts_t *op, int argc, char *argv[])
(0 == op->num_cgs) && (0 == op->page_code_given)) {
++op->do_join; /* implicit --join */
if (op->verbose)
- fprintf(stderr, "assume --join option is set\n");
+ pr2serr("assume --join option is set\n");
}
}
if (op->ind_given) {
@@ -942,54 +954,59 @@ cl_process(struct opts_t *op, int argc, char *argv[])
++op->page_code_given;
op->page_code = 2; /* implicit status page */
if (op->verbose)
- fprintf(stderr, "assume --page=2 (es) option is set\n");
+ pr2serr("assume --page=2 (es) option is set\n");
}
}
if (op->do_list || op->do_enumerate)
return 0;
if (op->do_control && op->do_status) {
- fprintf(stderr, "cannot have both '--control' and '--status'\n");
- fprintf(stderr, "For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("cannot have both '--control' and '--status'\n");
+ goto err_help;
} else if (op->do_control) {
- if (op->nickname_str)
+ if (op->nickname_str || op->seid_given)
;
else if (! op->do_data) {
- fprintf(stderr, "need to give '--data' in control mode\n");
- fprintf(stderr, "For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ pr2serr("need to give '--data' in control mode\n");
+ goto err_help;
}
} else if (0 == op->do_status)
op->do_status = 1; /* default to receiving status pages */
if (op->nickname_str) {
if (! op->do_control) {
- fprintf(stderr, "since '--nickname=' implies control mode "
- "require '--control' as well\n");
+ pr2serr("since '--nickname=' implies control mode, require "
+ "'--control' as well\n");
return SG_LIB_SYNTAX_ERROR;
}
if (op->page_code_given) {
if (DPC_SUBENC_NICKNAME != op->page_code) {
- fprintf(stderr, "since '--nickname=' assume or expect "
+ pr2serr("since '--nickname=' assume or expect "
"'--page=snic'\n");
return SG_LIB_SYNTAX_ERROR;
}
} else
op->page_code = DPC_SUBENC_NICKNAME;
+ } else if (op->seid_given) {
+ pr2serr("'--nickid=' must be used together with '--nickname='\n");
+ return SG_LIB_SYNTAX_ERROR;
+
}
if ((op->verbose > 4) && saddr_non_zero(op->sas_addr)) {
- fprintf(stderr, " SAS address (in hex): ");
+ pr2serr(" SAS address (in hex): ");
for (j = 0; j < 8; ++j)
- fprintf(stderr, "%02x", op->sas_addr[j]);
- fprintf(stderr, "\n");
+ pr2serr("%02x", op->sas_addr[j]);
+ pr2serr("\n");
}
- if (NULL == op->device_name) {
- fprintf(stderr, "missing DEVICE name!\n");
- fprintf(stderr, "For more information use '--help'\n");
- return SG_LIB_SYNTAX_ERROR;
+ if (NULL == op->dev_name) {
+ pr2serr("missing DEVICE name!\n");
+ goto err_help;
}
return 0;
+
+err_help:
+ pr2serr(" For more information use '--help'\n");
+ return SG_LIB_SYNTAX_ERROR;
}
/* Returns 64 bit signed integer given in either decimal or in hex. The
@@ -1038,8 +1055,8 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
else {
tavp->val = get_llnum(esp + 1);
if (-1 == tavp->val) {
- fprintf(stderr, "unable to decode: %s value\n", esp + 1);
- fprintf(stderr, " expected: <acronym>[=<val>]\n");
+ pr2serr("unable to decode: %s value\n", esp + 1);
+ pr2serr(" expected: <acronym>[=<val>]\n");
return -1;
}
}
@@ -1064,7 +1081,7 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
return -1;
}
if ((tavp->start_byte < 0) || (tavp->start_byte > 127)) {
- fprintf(stderr, "<start_byte> needs to be between 0 and 127\n");
+ pr2serr("<start_byte> needs to be between 0 and 127\n");
return -1;
}
cp = colp + 1;
@@ -1076,7 +1093,7 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
if (1 != sscanf(cp, "%d", &tavp->start_bit))
return -1;
if ((tavp->start_bit < 0) || (tavp->start_bit > 7)) {
- fprintf(stderr, "<start_bit> needs to be between 0 and 7\n");
+ pr2serr("<start_bit> needs to be between 0 and 7\n");
return -1;
}
if (colp) {
@@ -1084,7 +1101,7 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
return -1;
}
if ((tavp->num_bits < 1) || (tavp->num_bits > 64)) {
- fprintf(stderr, "<num_bits> needs to be between 1 and 64\n");
+ pr2serr("<num_bits> needs to be between 1 and 64\n");
return -1;
}
}
@@ -1121,10 +1138,9 @@ do_senddiag(int sg_fd, int pf_bit, void * outgoing_pg, int outgoing_len,
page_num = ((const char *)outgoing_pg)[0];
cp = find_out_diag_page_desc(page_num);
if (cp)
- fprintf(stderr, " Send diagnostic cmd name: %s\n", cp);
+ pr2serr(" Send diagnostic cmd name: %s\n", cp);
else
- fprintf(stderr, " Send diagnostic cmd number: 0x%x\n",
- page_num);
+ pr2serr(" Send diagnostic cmd number: 0x%x\n", page_num);
}
return sg_ll_send_diag(sg_fd, 0 /* sf_code */, pf_bit, 0 /* sf_bit */,
0 /* devofl_bit */, 0 /* unitofl_bit */,
@@ -1221,11 +1237,10 @@ do_rec_diag(int sg_fd, int page_code, unsigned char * rsp_buff,
cp = find_in_diag_page_desc(page_code);
if (op->verbose > 1) {
if (cp)
- fprintf(stderr, " Receive diagnostic results cmd for %s "
- "page\n", cp);
+ pr2serr(" Receive diagnostic results cmd for %s page\n", cp);
else
- fprintf(stderr, " Receive diagnostic results cmd for "
- "page 0x%x\n", page_code);
+ pr2serr(" Receive diagnostic results cmd for page 0x%x\n",
+ page_code);
}
res = sg_ll_receive_diag(sg_fd, 1 /* pcv */, page_code, rsp_buff,
rsp_buff_size, 1, op->verbose);
@@ -1233,23 +1248,23 @@ do_rec_diag(int sg_fd, int page_code, unsigned char * rsp_buff,
rsp_len = (rsp_buff[2] << 8) + rsp_buff[3] + 4;
if (rsp_len > rsp_buff_size) {
if (rsp_buff_size > 8) /* tried to get more than header */
- fprintf(stderr, "<<< warning response buffer too small "
- "[%d but need %d]>>>\n", rsp_buff_size, rsp_len);
+ pr2serr("<<< warning response buffer too small [%d but need "
+ "%d]>>>\n", rsp_buff_size, rsp_len);
rsp_len = rsp_buff_size;
}
if (rsp_lenp)
*rsp_lenp = rsp_len;
if (page_code != rsp_buff[0]) {
if ((0x9 == rsp_buff[0]) && (1 & rsp_buff[1])) {
- fprintf(stderr, "Enclosure busy, try again later\n");
+ pr2serr("Enclosure busy, try again later\n");
if (op->do_hex)
dStrHexErr((const char *)rsp_buff, rsp_len, 0);
} else if (0x8 == rsp_buff[0]) {
- fprintf(stderr, "Enclosure only supports Short Enclosure "
- "Status: 0x%x\n", rsp_buff[1]);
+ pr2serr("Enclosure only supports Short Enclosure Status: "
+ "0x%x\n", rsp_buff[1]);
} else {
- fprintf(stderr, "Invalid response, wanted page code: 0x%x "
- "but got 0x%x\n", page_code, rsp_buff[0]);
+ pr2serr("Invalid response, wanted page code: 0x%x but got "
+ "0x%x\n", page_code, rsp_buff[0]);
dStrHexErr((const char *)rsp_buff, rsp_len, 0);
}
return -2;
@@ -1257,28 +1272,26 @@ do_rec_diag(int sg_fd, int page_code, unsigned char * rsp_buff,
return 0;
} else if (op->verbose) {
if (cp)
- fprintf(stderr, "Attempt to fetch %s diagnostic page failed\n",
- cp);
+ pr2serr("Attempt to fetch %s diagnostic page failed\n", cp);
else
- fprintf(stderr, "Attempt to fetch status diagnostic page "
- "[0x%x] failed\n", page_code);
+ pr2serr("Attempt to fetch status diagnostic page [0x%x] failed\n",
+ page_code);
switch (res) {
case SG_LIB_CAT_NOT_READY:
- fprintf(stderr, " device no ready\n");
+ pr2serr(" device no ready\n");
break;
case SG_LIB_CAT_ABORTED_COMMAND:
- fprintf(stderr, " aborted command\n");
+ pr2serr(" aborted command\n");
break;
case SG_LIB_CAT_UNIT_ATTENTION:
- fprintf(stderr, " unit attention\n");
+ pr2serr(" unit attention\n");
break;
case SG_LIB_CAT_INVALID_OP:
- fprintf(stderr, " Receive diagnostic results command not "
- "supported\n");
+ pr2serr(" Receive diagnostic results command not supported\n");
break;
case SG_LIB_CAT_ILLEGAL_REQ:
- fprintf(stderr, " Receive diagnostic results command, "
- "bad field in cdb\n");
+ pr2serr(" Receive diagnostic results command, bad field in "
+ "cdb\n");
break;
}
}
@@ -1330,7 +1343,7 @@ ses_configuration_sdg(const unsigned char * resp, int resp_len)
": %d\n", ((ucp[0] & 0x70) >> 4), (ucp[0] & 0x7));
printf(" number of type descriptor headers: %d\n", ucp[2]);
if (el < 40) {
- fprintf(stderr, " enc descriptor len=%d ??\n", el);
+ pr2serr(" enc descriptor len=%d ??\n", el);
continue;
}
printf(" enclosure logical identifier (hex): ");
@@ -1368,7 +1381,7 @@ ses_configuration_sdg(const unsigned char * resp, int resp_len)
}
return;
truncated:
- fprintf(stderr, " <<<ses_configuration_sdg: response too short>>>\n");
+ pr2serr(" <<<ses_configuration_sdg: response too short>>>\n");
return;
}
@@ -1390,7 +1403,7 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
resp = (unsigned char *)calloc(MX_ALLOC_LEN, 1);
if (NULL == resp) {
- fprintf(stderr, "populate: unable to allocate %d bytes on heap\n",
+ pr2serr("populate: unable to allocate %d bytes on heap\n",
MX_ALLOC_LEN);
ret = -1;
goto the_end;
@@ -1398,7 +1411,7 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
res = do_rec_diag(fd, DPC_CONFIGURATION, resp, MX_ALLOC_LEN, op,
&resp_len);
if (res) {
- fprintf(stderr, "populate: couldn't read config page, res=%d\n", res);
+ pr2serr("populate: couldn't read config page, res=%d\n", res);
ret = -1;
goto the_end;
}
@@ -1420,8 +1433,7 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
el = ucp[3] + 4;
sum_type_dheaders += ucp[2];
if (el < 40) {
- fprintf(stderr, "populate: short enc descriptor len=%d ??\n",
- el);
+ pr2serr("populate: short enc descriptor len=%d ??\n", el);
continue;
}
if ((0 == k) && primary_ip) {
@@ -1438,7 +1450,7 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
if ((ucp + 3) > last_ucp)
goto p_truncated;
if (k >= MX_ELEM_HDR) {
- fprintf(stderr, "populate: too many elements\n");
+ pr2serr("populate: too many elements\n");
ret = -1;
goto the_end;
}
@@ -1461,11 +1473,10 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
op->ind_th = k;
else {
if (op->ind_et_inst)
- fprintf(stderr, "populate: unable to find element type "
- "'%s%d'\n", op->ind_etp->abbrev, op->ind_et_inst);
+ pr2serr("populate: unable to find element type '%s%d'\n",
+ op->ind_etp->abbrev, op->ind_et_inst);
else
- fprintf(stderr, "populate: unable to find element type "
- "'%s'\n",
+ pr2serr("populate: unable to find element type '%s'\n",
op->ind_etp->abbrev);
ret = -1;
goto the_end;
@@ -1475,7 +1486,7 @@ populate_type_desc_hdr_arr(int fd, struct type_desc_hdr_t * tdhp,
goto the_end;
p_truncated:
- fprintf(stderr, "populate: config too short\n");
+ pr2serr("populate: config too short\n");
ret = -1;
the_end:
@@ -1950,8 +1961,7 @@ ses_enc_status_dp(const struct type_desc_hdr_t * tdhp, int num_telems,
(resp[6] << 8) | resp[7];
printf(" generation code: 0x%x\n", gen_code);
if (ref_gen_code != gen_code) {
- fprintf(stderr, " <<state of enclosure changed, please try "
- "again>>\n");
+ pr2serr(" <<state of enclosure changed, please try again>>\n");
return;
}
printf(" status descriptor list\n");
@@ -1985,7 +1995,7 @@ ses_enc_status_dp(const struct type_desc_hdr_t * tdhp, int num_telems,
op->ind_indiv);
return;
truncated:
- fprintf(stderr, " <<<enc: response too short>>>\n");
+ pr2serr(" <<<enc: response too short>>>\n");
return;
}
@@ -2086,8 +2096,7 @@ ses_threshold_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
(resp[6] << 8) | resp[7];
printf(" generation code: 0x%x\n", gen_code);
if (ref_gen_code != gen_code) {
- fprintf(stderr, " <<state of enclosure changed, please try "
- "again>>\n");
+ pr2serr(" <<state of enclosure changed, please try again>>\n");
return;
}
printf(" Threshold status descriptor list\n");
@@ -2121,7 +2130,7 @@ ses_threshold_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
op->ind_indiv);
return;
truncated:
- fprintf(stderr, " <<<thresh: response too short>>>\n");
+ pr2serr(" <<<thresh: response too short>>>\n");
return;
}
@@ -2150,8 +2159,7 @@ ses_element_desc_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
(resp[6] << 8) | resp[7];
printf(" generation code: 0x%x\n", gen_code);
if (ref_gen_code != gen_code) {
- fprintf(stderr, " <<state of enclosure changed, please try "
- "again>>\n");
+ pr2serr(" <<state of enclosure changed, please try again>>\n");
return;
}
printf(" element descriptor by type list\n");
@@ -2192,7 +2200,7 @@ ses_element_desc_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
op->ind_indiv);
return;
truncated:
- fprintf(stderr, " <<<element: response too short>>>\n");
+ pr2serr(" <<<element: response too short>>>\n");
return;
}
@@ -2385,8 +2393,7 @@ ses_additional_elem_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
(resp[6] << 8) | resp[7];
printf(" generation code: 0x%x\n", gen_code);
if (ref_gen_code != gen_code) {
- fprintf(stderr, " <<state of enclosure changed, please try "
- "again>>\n");
+ pr2serr(" <<state of enclosure changed, please try again>>\n");
return;
}
printf(" additional element status descriptor list\n");
@@ -2442,7 +2449,7 @@ ses_additional_elem_sdg(const struct type_desc_hdr_t * tdhp, int num_telems,
}
return;
truncated:
- fprintf(stderr, " <<<additional: response too short>>>\n");
+ pr2serr(" <<<additional: response too short>>>\n");
return;
}
@@ -2478,7 +2485,7 @@ ses_subenc_help_sdg(const unsigned char * resp, int resp_len)
}
return;
truncated:
- fprintf(stderr, " <<<subenc: response too short>>>\n");
+ pr2serr(" <<<subenc: response too short>>>\n");
return;
}
@@ -2521,7 +2528,7 @@ ses_subenc_string_sdg(const unsigned char * resp, int resp_len)
}
return;
truncated:
- fprintf(stderr, " <<<subence str: response too short>>>\n");
+ pr2serr(" <<<subence str: response too short>>>\n");
return;
}
@@ -2557,7 +2564,7 @@ ses_subenc_nickname_sdg(const unsigned char * resp, int resp_len)
}
return;
truncated:
- fprintf(stderr, " <<<subence str: response too short>>>\n");
+ pr2serr(" <<<subence str: response too short>>>\n");
return;
}
@@ -2624,7 +2631,7 @@ ses_download_code_sdg(const unsigned char * resp, int resp_len)
}
return;
truncated:
- fprintf(stderr, " <<<download: response too short>>>\n");
+ pr2serr(" <<<download: response too short>>>\n");
return;
}
@@ -2669,16 +2676,16 @@ read_hex(const char * inp, unsigned char * arr, int * arr_len)
continue;
k = strspn(lcp, "0123456789aAbBcCdDeEfF ,\t");
if (in_len != k) {
- fprintf(stderr, "read_hex: syntax error at "
- "line %d, pos %d\n", j + 1, m + k + 1);
+ pr2serr("read_hex: syntax error at line %d, pos %d\n", j + 1,
+ m + k + 1);
return 1;
}
for (k = 0; k < (MX_DATA_IN - off); ++k) {
if (1 == sscanf(lcp, "%x", &h)) {
if (h > 0xff) {
- fprintf(stderr, "read_hex: hex number "
- "larger than 0xff in line %d, pos %d\n",
- j + 1, (int)(lcp - line + 1));
+ pr2serr("read_hex: hex number larger than 0xff in "
+ "line %d, pos %d\n", j + 1,
+ (int)(lcp - line + 1));
return 1;
}
arr[off + k] = h;
@@ -2689,8 +2696,7 @@ read_hex(const char * inp, unsigned char * arr, int * arr_len)
if ('\0' == *lcp)
break;
} else {
- fprintf(stderr, "read_hex: error in "
- "line %d, at pos %d\n", j + 1,
+ pr2serr("read_hex: error in line %d, at pos %d\n", j + 1,
(int)(lcp - line + 1));
return 1;
}
@@ -2703,15 +2709,14 @@ read_hex(const char * inp, unsigned char * arr, int * arr_len)
} else { /* hex string on command line */
k = strspn(inp, "0123456789aAbBcCdDeEfF, ");
if (in_len != k) {
- fprintf(stderr, "read_hex: error at pos %d\n",
- k + 1);
+ pr2serr("read_hex: error at pos %d\n", k + 1);
return 1;
}
for (k = 0; k < MX_DATA_IN; ++k) {
if (1 == sscanf(lcp, "%x", &h)) {
if (h > 0xff) {
- fprintf(stderr, "read_hex: hex number larger "
- "than 0xff at pos %d\n", (int)(lcp - inp + 1));
+ pr2serr("read_hex: hex number larger than 0xff at pos "
+ "%d\n", (int)(lcp - inp + 1));
return 1;
}
arr[k] = h;
@@ -2725,8 +2730,7 @@ read_hex(const char * inp, unsigned char * arr, int * arr_len)
cp = c2p;
lcp = cp + 1;
} else {
- fprintf(stderr, "read_hex: error at pos %d\n",
- (int)(lcp - inp + 1));
+ pr2serr("read_hex: error at pos %d\n", (int)(lcp - inp + 1));
return 1;
}
}
@@ -2748,8 +2752,8 @@ ses_process_status_page(int sg_fd, struct opts_t * op)
resp = (unsigned char *)calloc(MX_ALLOC_LEN, 1);
if (NULL == resp) {
- fprintf(stderr, "process_status_page: unable to allocate %d bytes "
- "on heap\n", MX_ALLOC_LEN);
+ pr2serr("process_status_page: unable to allocate %d bytes on heap\n",
+ MX_ALLOC_LEN);
ret = -1;
goto fini;
}
@@ -2988,13 +2992,13 @@ join_work(int sg_fd, struct opts_t * op, int display)
if (res)
return res;
if (enc_stat_rsp_len < 8) {
- fprintf(stderr, "Enclosure Status response too short\n");
+ pr2serr("Enclosure Status response too short\n");
return -1;
}
gen_code = (enc_stat_rsp[4] << 24) | (enc_stat_rsp[5] << 16) |
(enc_stat_rsp[6] << 8) | enc_stat_rsp[7];
if (ref_gen_code != gen_code) {
- fprintf(stderr, "%s", enc_state_changed);
+ pr2serr("%s", enc_state_changed);
return -1;
}
es_ucp = enc_stat_rsp + 8;
@@ -3004,13 +3008,13 @@ join_work(int sg_fd, struct opts_t * op, int display)
sizeof(elem_desc_rsp), op, &elem_desc_rsp_len);
if (0 == res) {
if (elem_desc_rsp_len < 8) {
- fprintf(stderr, "Element Descriptor response too short\n");
+ pr2serr("Element Descriptor response too short\n");
return -1;
}
gen_code = (elem_desc_rsp[4] << 24) | (elem_desc_rsp[5] << 16) |
(elem_desc_rsp[6] << 8) | elem_desc_rsp[7];
if (ref_gen_code != gen_code) {
- fprintf(stderr, "%s", enc_state_changed);
+ pr2serr("%s", enc_state_changed);
return -1;
}
ed_ucp = elem_desc_rsp + 8;
@@ -3020,8 +3024,7 @@ join_work(int sg_fd, struct opts_t * op, int display)
ed_ucp = NULL;
res = 0;
if (op->verbose)
- fprintf(stderr, " Element Descriptor page not "
- "available\n");
+ pr2serr(" Element Descriptor page not available\n");
}
if (display || (DPC_ADD_ELEM_STATUS == op->page_code) ||
@@ -3030,14 +3033,13 @@ join_work(int sg_fd, struct opts_t * op, int display)
sizeof(add_elem_rsp), op, &add_elem_rsp_len);
if (0 == res) {
if (add_elem_rsp_len < 8) {
- fprintf(stderr, "Additional Element Status response too "
- "short\n");
+ pr2serr("Additional Element Status response too short\n");
return -1;
}
gen_code = (add_elem_rsp[4] << 24) | (add_elem_rsp[5] << 16) |
(add_elem_rsp[6] << 8) | add_elem_rsp[7];
if (ref_gen_code != gen_code) {
- fprintf(stderr, "%s", enc_state_changed);
+ pr2serr("%s", enc_state_changed);
return -1;
}
ae_ucp = add_elem_rsp + 8;
@@ -3048,8 +3050,7 @@ join_work(int sg_fd, struct opts_t * op, int display)
ae_last_ucp = NULL;
res = 0;
if (op->verbose)
- fprintf(stderr, " Additional Element Status page not "
- "available\n");
+ pr2serr(" Additional Element Status page not available\n");
}
} else {
ae_ucp = NULL;
@@ -3062,13 +3063,13 @@ join_work(int sg_fd, struct opts_t * op, int display)
sizeof(threshold_rsp), op, &threshold_rsp_len);
if (0 == res) {
if (threshold_rsp_len < 8) {
- fprintf(stderr, "Threshold In response too short\n");
+ pr2serr("Threshold In response too short\n");
return -1;
}
gen_code = (threshold_rsp[4] << 24) | (threshold_rsp[5] << 16) |
(threshold_rsp[6] << 8) | threshold_rsp[7];
if (ref_gen_code != gen_code) {
- fprintf(stderr, "%s", enc_state_changed);
+ pr2serr("%s", enc_state_changed);
return -1;
}
t_ucp = threshold_rsp + 8;
@@ -3078,7 +3079,7 @@ join_work(int sg_fd, struct opts_t * op, int display)
t_ucp = NULL;
res = 0;
if (op->verbose)
- fprintf(stderr, " Threshold In page not available\n");
+ pr2serr(" Threshold In page not available\n");
}
} else {
threshold_rsp_len = 0;
@@ -3151,8 +3152,7 @@ join_work(int sg_fd, struct opts_t * op, int display)
if ((ae_ucp + 1) > ae_last_ucp) {
get_out = 1;
if (op->verbose)
- fprintf(stderr, "join_work: off end of ae "
- "page\n");
+ pr2serr("join_work: off end of ae page\n");
break;
}
eip = !!(ae_ucp[0] & 0x10);
@@ -3162,8 +3162,8 @@ join_work(int sg_fd, struct opts_t * op, int display)
jr2p = join_arr + ei;
if ((ei >= jr_max_ind) || (NULL == jr2p->enc_statp)) {
get_out = 1;
- fprintf(stderr, "join_work: oi=%d, ei=%d, eiioe=1 "
- "not in join_arr\n", k, ei);
+ pr2serr("join_work: oi=%d, ei=%d, eiioe=1 not in "
+ "join_arr\n", k, ei);
break;
}
devslotnum_and_sasaddr(jr2p, ae_ucp);
@@ -3182,9 +3182,8 @@ try_again:
}
if (NULL == jr2p->enc_statp) {
get_out = 1;
- fprintf(stderr, "join_work: oi=%d, ei=%d "
- "(broken_ei=%d) not in join_arr\n", k,
- ei, broken_ei);
+ pr2serr("join_work: oi=%d, ei=%d (broken_ei=%d) "
+ "not in join_arr\n", k, ei, broken_ei);
break;
}
if (! active_et_aesp(jr2p->etype)) {
@@ -3200,8 +3199,8 @@ try_again:
++jrp;
if (NULL == jrp->enc_statp) {
get_out = 1;
- fprintf(stderr, "join_work: join_arr has no "
- "space for ae\n");
+ pr2serr("join_work: join_arr has no space for "
+ "ae\n");
break;
}
jrp->add_elem_statp = ae_ucp;
@@ -3214,8 +3213,7 @@ try_again:
for (j = 0; j <= tdhp->num_elements; ++j, ++jrp) {
if (NULL == jrp->enc_statp) {
get_out = 1;
- fprintf(stderr, "join_work: join_arr has no "
- "space\n");
+ pr2serr("join_work: join_arr has no space\n");
break;
}
}
@@ -3228,22 +3226,21 @@ try_again:
if (op->verbose > 3) {
jrp = join_arr;
for (k = 0; ((k < MX_JOIN_ROWS) && jrp->enc_statp); ++k, ++jrp) {
- fprintf(stderr, "el_ind_th=%d el_ind_indiv=%d etype=%d "
- "se_id=%d ei=%d ei2=%d dsn=%d sa=0x", jrp->el_ind_th,
- jrp->el_ind_indiv, jrp->etype, jrp->se_id, jrp->ei_asc,
- jrp->ei_asc2, jrp->dev_slot_num);
+ pr2serr("el_ind_th=%d el_ind_indiv=%d etype=%d se_id=%d ei=%d "
+ "ei2=%d dsn=%d sa=0x", jrp->el_ind_th, jrp->el_ind_indiv,
+ jrp->etype, jrp->se_id, jrp->ei_asc, jrp->ei_asc2,
+ jrp->dev_slot_num);
if (saddr_non_zero(jrp->sas_addr)) {
for (j = 0; j < 8; ++j)
- fprintf(stderr, "%02x", jrp->sas_addr[j]);
+ pr2serr("%02x", jrp->sas_addr[j]);
} else
- fprintf(stderr, "0");
- fprintf(stderr, " %s %s %s %s\n", (jrp->enc_statp ? "ES" : ""),
+ pr2serr("0");
+ pr2serr(" %s %s %s %s\n", (jrp->enc_statp ? "ES" : ""),
(jrp->elem_descp ? "ED" : ""),
(jrp->add_elem_statp ? "AES" : ""),
(jrp->thresh_inp ? "TI" : ""));
}
- fprintf(stderr, ">> elements in join_arr: %d, broken_ei=%d\n", k,
- broken_ei);
+ pr2serr(">> elements in join_arr: %d, broken_ei=%d\n", k, broken_ei);
}
if (! display) /* probably wanted join_arr[] built only */
@@ -3463,8 +3460,7 @@ cgs_enc_ctl_stat(int sg_fd, const struct join_row_t * jrp,
return -2;
}
if (op->verbose > 1)
- fprintf(stderr, " s_byte=%d, s_bit=%d, n_bits=%d\n", s_byte, s_bit,
- n_bits);
+ pr2serr(" s_byte=%d, s_bit=%d, n_bits=%d\n", s_byte, s_bit, n_bits);
if (op->get_str) {
ui = get_big_endian(jrp->enc_statp + s_byte, s_bit, n_bits);
if (op->do_hex)
@@ -3481,7 +3477,7 @@ cgs_enc_ctl_stat(int sg_fd, const struct join_row_t * jrp,
len = (enc_stat_rsp[2] << 8) + enc_stat_rsp[3] + 4;
ret = do_senddiag(sg_fd, 1, enc_stat_rsp, len, 1, op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Enclosure Control page\n");
+ pr2serr("couldn't send Enclosure Control page\n");
return -1;
}
}
@@ -3501,7 +3497,7 @@ cgs_threshold(int sg_fd, const struct join_row_t * jrp,
const struct acronym2tuple * a2tp;
if (NULL == jrp->thresh_inp) {
- fprintf(stderr, "No Threshold In/Out element available\n");
+ pr2serr("No Threshold In/Out element available\n");
return -1;
}
if (NULL == tavp->acron) {
@@ -3536,7 +3532,7 @@ cgs_threshold(int sg_fd, const struct join_row_t * jrp,
len = (threshold_rsp[2] << 8) + threshold_rsp[3] + 4;
ret = do_senddiag(sg_fd, 1, threshold_rsp, len, 1, op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Threshold Out page\n");
+ pr2serr("couldn't send Threshold Out page\n");
return -1;
}
}
@@ -3556,7 +3552,7 @@ cgs_additional_el(const struct join_row_t * jrp,
const struct acronym2tuple * a2tp;
if (NULL == jrp->add_elem_statp) {
- fprintf(stderr, "No additional element status element available\n");
+ pr2serr("No additional element status element available\n");
return -1;
}
if (NULL == tavp->acron) {
@@ -3584,8 +3580,8 @@ cgs_additional_el(const struct join_row_t * jrp,
else
printf("%" PRId64 "\n", (int64_t)ui);
} else {
- fprintf(stderr, "--clear and --set not available for Additional "
- "element status page\n");
+ pr2serr("--clear and --set not available for Additional Element "
+ "Status page\n");
return -1;
}
return 0;
@@ -3618,8 +3614,7 @@ ses_cgs(int sg_fd, const struct tuple_acronym_val * tavp,
++found;
}
if (! found) {
- fprintf(stderr, "acroynm %s not found (try '-ee' option)\n",
- tavp->acron);
+ pr2serr("acroynm %s not found (try '-ee' option)\n", tavp->acron);
return -1;
}
ret = join_work(sg_fd, op, 0);
@@ -3661,7 +3656,7 @@ ses_cgs(int sg_fd, const struct tuple_acronym_val * tavp,
else if (DPC_ADD_ELEM_STATUS == op->page_code)
ret = cgs_additional_el(jrp, tavp, op);
else {
- fprintf(stderr, "page %s not supported for cgs\n",
+ pr2serr("page %s not supported for cgs\n",
find_element_tname(op->page_code, b, sizeof(b)));
ret = -1;
}
@@ -3671,16 +3666,14 @@ ses_cgs(int sg_fd, const struct tuple_acronym_val * tavp,
}
if ((NULL == jrp->enc_statp) || (k >= MX_JOIN_ROWS)) {
if (op->desc_name)
- fprintf(stderr, "descriptor name: %s not found (check the 'ed' "
- "page [0x7])\n", op->desc_name);
+ pr2serr("descriptor name: %s not found (check the 'ed' page "
+ "[0x7])\n", op->desc_name);
else if (op->dev_slot_num >= 0)
- fprintf(stderr, "device slot number: %d not found\n",
- op->dev_slot_num);
+ pr2serr("device slot number: %d not found\n", op->dev_slot_num);
else if (saddr_non_zero(op->sas_addr))
- fprintf(stderr, "SAS address not found\n");
+ pr2serr("SAS address not found\n");
else
- fprintf(stderr, "index: %d,%d not found\n", op->ind_th,
- op->ind_indiv);
+ pr2serr("index: %d,%d not found\n", op->ind_th, op->ind_indiv);
return -1;
}
return 0;
@@ -3701,21 +3694,20 @@ ses_set_nickname(int sg_fd, struct opts_t * op)
/* Only after the generation code, offset 4 for 4 bytes */
res = do_rec_diag(sg_fd, DPC_SUBENC_NICKNAME, b, 8, op, &resp_len);
if (res) {
- fprintf(stderr, "set_nickname: Subenclosure nickname status page, "
- "res=%d\n", res);
+ pr2serr("set_nickname: Subenclosure nickname status page, res=%d\n",
+ res);
return -1;
}
if (resp_len < 8) {
- fprintf(stderr, "set_nickname: Subenclosure nickname status page, "
- "response length too short: %d\n", resp_len);
+ pr2serr("set_nickname: Subenclosure nickname status page, response "
+ "length too short: %d\n", resp_len);
return -1;
}
if (op->verbose) {
unsigned int gc;
gc = (b[4] << 24) + (b[5] << 16) + (b[6] << 8) + b[7];
- fprintf(stderr, "set_nickname: generation code from status page: "
- "%u\n", gc);
+ pr2serr("set_nickname: generation code from status page: %u\n", gc);
}
b[0] = (unsigned char)DPC_SUBENC_NICKNAME; /* just in case */
b[1] = (unsigned char)op->seid;
@@ -3759,9 +3751,9 @@ enumerate_work(const struct opts_t * op)
char b[64];
const char * cp;
- if (op->device_name)
+ if (op->dev_name)
printf(">>> DEVICE %s ignored when --%s option given.\n",
- op->device_name, (op->do_list ? "list" : "enumerate"));
+ op->dev_name, (op->do_list ? "list" : "enumerate"));
num = op->do_enumerate + op->do_list;
if (num < 2) {
enumerate_diag_pages();
@@ -3820,7 +3812,7 @@ main(int argc, char * argv[])
if (res)
return SG_LIB_SYNTAX_ERROR;
if (op->do_version) {
- fprintf(stderr, "version: %s\n", version_str);
+ pr2serr("version: %s\n", version_str);
return 0;
}
if (op->do_help) {
@@ -3838,18 +3830,17 @@ main(int argc, char * argv[])
strncpy(buff, cp, sizeof(buff) - 1);
buff[sizeof(buff) - 1] = '\0';
if (parse_cgs_str(buff, &tav)) {
- fprintf(stderr, "unable to decode STR argument to --clear, "
- "--get or --set\n");
+ pr2serr("unable to decode STR argument to --clear, --get or "
+ "--set\n");
return SG_LIB_SYNTAX_ERROR;
}
if (op->get_str && tav.val_str)
- fprintf(stderr, "--get option ignoring =<val> at the end "
- "of STR argument\n");
+ pr2serr("--get option ignoring =<val> at the end of STR "
+ "argument\n");
if (! (op->ind_given || op->desc_name || (op->dev_slot_num >= 0) ||
saddr_non_zero(op->sas_addr))) {
- fprintf(stderr, "with --clear, --get or --set option need "
- "either\n --index, --descriptor, --dev-slot-num or "
- "--sas-addr\n");
+ pr2serr("with --clear, --get or --set option need either\n "
+ "--index, --descriptor, --dev-slot-num or --sas-addr\n");
return SG_LIB_SYNTAX_ERROR;
}
if (NULL == tav.val_str) {
@@ -3861,23 +3852,22 @@ main(int argc, char * argv[])
if (op->page_code_given && (DPC_ENC_STATUS != op->page_code) &&
(DPC_THRESHOLD != op->page_code) &&
(DPC_ADD_ELEM_STATUS != op->page_code)) {
- fprintf(stderr, "--clear, --get or --set options only supported "
- "for the Enclosure\nControl/Status, Threshold "
- "In/Out and Additional Element Status pages\n");
+ pr2serr("--clear, --get or --set options only supported for the "
+ "Enclosure\nControl/Status, Threshold In/Out and "
+ "Additional Element Status pages\n");
return SG_LIB_SYNTAX_ERROR;
}
}
- sg_fd = sg_cmds_open_device(op->device_name, 0 /* rw */, op->verbose);
+ sg_fd = sg_cmds_open_device(op->dev_name, 0 /* rw */, op->verbose);
if (sg_fd < 0) {
- fprintf(stderr, "open error: %s: %s\n", op->device_name,
+ pr2serr("open error: %s: %s\n", op->dev_name,
safe_strerror(-sg_fd));
return SG_LIB_FILE_ERROR;
}
if (! (op->do_raw || have_cgs)) {
if (sg_simple_inquiry(sg_fd, &inq_resp, 1, op->verbose)) {
- fprintf(stderr, "%s doesn't respond to a SCSI INQUIRY\n",
- op->device_name);
+ pr2serr("%s doesn't respond to a SCSI INQUIRY\n", op->dev_name);
ret = SG_LIB_CAT_OTHER;
goto err_out;
} else {
@@ -3915,7 +3905,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Enclosure Control page\n");
+ pr2serr("couldn't send Enclosure Control page\n");
goto err_out;
}
break;
@@ -3925,7 +3915,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send String Out page\n");
+ pr2serr("couldn't send String Out page\n");
goto err_out;
}
break;
@@ -3935,7 +3925,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Threshold Out page\n");
+ pr2serr("couldn't send Threshold Out page\n");
goto err_out;
}
break;
@@ -3945,7 +3935,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Array Control page\n");
+ pr2serr("couldn't send Array Control page\n");
goto err_out;
}
break;
@@ -3955,8 +3945,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Subenclosure String Out "
- "page\n");
+ pr2serr("couldn't send Subenclosure String Out page\n");
goto err_out;
}
break;
@@ -3966,8 +3955,7 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Download Microcode Control "
- "page\n");
+ pr2serr("couldn't send Download Microcode Control page\n");
goto err_out;
}
break;
@@ -3977,16 +3965,15 @@ main(int argc, char * argv[])
ret = do_senddiag(sg_fd, 1, op->data_arr, op->arr_len + 4, 1,
op->verbose);
if (ret) {
- fprintf(stderr, "couldn't send Subenclosure Nickname "
- "Control page\n");
+ pr2serr("couldn't send Subenclosure Nickname Control page\n");
goto err_out;
}
break;
default:
- fprintf(stderr, "Setting SES control page 0x%x not supported "
- "by this utility\n", op->page_code);
- fprintf(stderr, "That can be done with the sg_senddiag utility "
- "with its '--raw=' option\n");
+ pr2serr("Setting SES control page 0x%x not supported by this "
+ "utility\n", op->page_code);
+ pr2serr("That can be done with the sg_senddiag utility with its "
+ "'--raw=' option\n");
ret = SG_LIB_SYNTAX_ERROR;
break;
}
@@ -3996,29 +3983,29 @@ err_out:
if (0 == op->do_status) {
switch (ret) {
case SG_LIB_CAT_NOT_READY:
- fprintf(stderr, " device no ready\n");
+ pr2serr(" device no ready\n");
break;
case SG_LIB_CAT_ABORTED_COMMAND:
- fprintf(stderr, " aborted command\n");
+ pr2serr(" aborted command\n");
break;
case SG_LIB_CAT_UNIT_ATTENTION:
- fprintf(stderr, " unit attention\n");
+ pr2serr(" unit attention\n");
break;
case SG_LIB_CAT_INVALID_OP:
- fprintf(stderr, " Send diagnostics command not supported\n");
+ pr2serr(" Send diagnostics command not supported\n");
break;
case SG_LIB_CAT_ILLEGAL_REQ:
- fprintf(stderr, " Send diagnostics command, bad field in "
- "cdb or parameter list\n");
+ pr2serr(" Send diagnostics command, bad field in cdb or "
+ "parameter list\n");
break;
}
}
if (ret && (0 == op->verbose))
- fprintf(stderr, "Problem detected, try again with --verbose option "
- "for more information\n");
+ pr2serr("Problem detected, try again with --verbose option for more "
+ "information\n");
res = sg_cmds_close_device(sg_fd);
if (res < 0) {
- fprintf(stderr, "close error: %s\n", safe_strerror(-res));
+ pr2serr("close error: %s\n", safe_strerror(-res));
if (0 == ret)
return SG_LIB_FILE_ERROR;
}