- Fixup T10 Vendor designator display (bnc#805059) - In rescan-scsi-bus.sh, check if the HBA driver exports issue_lip in sysfs before using it (bnc#780946) OBS-URL: https://build.opensuse.org/request/show/196310 OBS-URL: https://build.opensuse.org/package/show/Base:System/sg3_utils?expand=0&rev=28
78 lines
3.0 KiB
Diff
78 lines
3.0 KiB
Diff
From 5a20c030863cc14647651586ab07554d73a062a8 Mon Sep 17 00:00:00 2001
|
|
From: Hannes Reinecke <hare@suse.de>
|
|
Date: Thu, 23 May 2013 09:26:40 +0200
|
|
Subject: [PATCH] Fixup T10 Vendor designator display
|
|
|
|
The T10 Vendor designator might have a code set of 'binary', in
|
|
which case the T10 Vendor ID is an 8 byte ASCII field, and the
|
|
vendor specific identifier is in binary.
|
|
|
|
References: bnc#805059
|
|
|
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
|
|
|
diff --git a/src/sg_inq.c b/src/sg_inq.c
|
|
index 4848574..408ecdd 100644
|
|
--- a/src/sg_inq.c
|
|
+++ b/src/sg_inq.c
|
|
@@ -1115,8 +1115,16 @@ decode_dev_ids(const char * leadin, unsigned char * buff, int len, int do_hex)
|
|
break;
|
|
case 1: /* T10 vendor identification */
|
|
printf(" vendor id: %.8s\n", ip);
|
|
- if (i_len > 8)
|
|
- printf(" vendor specific: %.*s\n", i_len - 8, ip + 8);
|
|
+ if (i_len > 8) {
|
|
+ if ((2 == c_set) || (3 == c_set)) { /* ASCII or UTF-8 */
|
|
+ printf(" vendor specific: %.*s\n", i_len - 8, ip + 8);
|
|
+ } else {
|
|
+ printf(" vendor specific: 0x");
|
|
+ for (m = 8; m < i_len; ++m)
|
|
+ printf("%02x", (unsigned int)ip[m]);
|
|
+ printf("\n");
|
|
+ }
|
|
+ }
|
|
break;
|
|
case 2: /* EUI-64 based */
|
|
printf(" EUI-64 based %d byte identifier\n", i_len);
|
|
@@ -1405,8 +1413,15 @@ export_dev_ids(unsigned char * buff, int len)
|
|
printf("SCSI_IDENT_%s_VENDOR=%.*s\n", assoc_str, k, ip);
|
|
break;
|
|
case 1: /* T10 vendor identification */
|
|
- k = encode_whitespaces(ip, i_len);
|
|
- printf("SCSI_IDENT_%s_T10=%.*s\n", assoc_str, k, ip);
|
|
+ printf("SCSI_IDENT_%s_T10=", assoc_str);
|
|
+ if ((2 == c_set) || (3 == c_set)) {
|
|
+ k = encode_whitespaces(ip, i_len);
|
|
+ printf("%.*s\n", k, ip);
|
|
+ } else {
|
|
+ for (m = 0; m < i_len; ++m)
|
|
+ printf("%02x", (unsigned int)ip[m]);
|
|
+ printf("\n");
|
|
+ }
|
|
break;
|
|
case 2: /* EUI-64 based */
|
|
if (1 != c_set) {
|
|
diff --git a/src/sg_vpd.c b/src/sg_vpd.c
|
|
index f991623..f7345db 100644
|
|
--- a/src/sg_vpd.c
|
|
+++ b/src/sg_vpd.c
|
|
@@ -796,8 +796,16 @@ decode_designation_descriptor(const unsigned char * ip, int i_len,
|
|
break;
|
|
case 1: /* T10 vendor identification */
|
|
printf(" vendor id: %.8s\n", ip);
|
|
- if (i_len > 8)
|
|
- printf(" vendor specific: %.*s\n", i_len - 8, ip + 8);
|
|
+ if (i_len > 8) {
|
|
+ if ((2 == c_set) || (3 == c_set)) { /* ASCII or UTF-8 */
|
|
+ printf(" vendor specific: %.*s\n", i_len - 8, ip + 8);
|
|
+ } else {
|
|
+ printf(" vendor specific: 0x");
|
|
+ for (m = 8; m < i_len; ++m)
|
|
+ printf("%02x", (unsigned int)ip[m]);
|
|
+ printf("\n");
|
|
+ }
|
|
+ }
|
|
break;
|
|
case 2: /* EUI-64 based */
|
|
if (! long_out) {
|