aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2014-04-28 04:52:47 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2014-04-28 04:52:47 +0000
commitaf4e550a23d9b53e9b86acf3ce186d3890efd85f (patch)
treeb007e79adea92490ba81be9b8e38238865bdc55e /utils
parentd43013ef6274b5797cfc340ecf0f49b7e5bce5ae (diff)
downloadsg3_utils-af4e550a23d9b53e9b86acf3ce186d3890efd85f.tar.gz
another ... dStrHex(Err): fix output truncation error
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@571 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'utils')
-rw-r--r--utils/tst_sg_lib.c257
1 files changed, 158 insertions, 99 deletions
diff --git a/utils/tst_sg_lib.c b/utils/tst_sg_lib.c
index 504530d5..1c4fa7b8 100644
--- a/utils/tst_sg_lib.c
+++ b/utils/tst_sg_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 Douglas Gilbert.
+ * Copyright (c) 2013-2014 Douglas Gilbert.
* All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the BSD_LICENSE file.
@@ -22,22 +22,25 @@
*
*/
-static char * version_str = "1.00 20130122";
+static char * version_str = "1.01 20140427";
#define MAX_LINE_LEN 1024
static struct option long_options[] = {
+ {"dtsrhex", 0, 0, 'd'},
{"help", 0, 0, 'h'},
+ {"printf", 0, 0, 'p'},
+ {"sense", 0, 0, 's'},
{"verbose", 0, 0, 'v'},
{"version", 0, 0, 'V'},
{0, 0, 0, 0},
};
-const unsigned char desc_sense_data[] = {
+const unsigned char desc_sense_data1[] = {
/* unrec_err, excessive_writes, sdat_ovfl, additional_len=? */
- 0x72, 0x1, 0x3, 0x2, 0x80, 0x0, 0x0, 32+4+8+4+28,
+ 0x72, 0x1, 0x3, 0x2, 0x80, 0x0, 0x0, 12+12+8+4+8+4+28,
/* Information: 0x11223344556677bb */
0x0, 0xa, 0x80, 0x0, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0xbb,
/* command specific: 0x3344556677bbccff */
@@ -57,15 +60,30 @@ const unsigned char desc_sense_data[] = {
2,0,0x12,0x34,
};
+const unsigned char desc_sense_data2[] = {
+ /* ill_req, inv fld in para list, additional_len=? */
+ 0x72, 0x5, 0x26, 0x0, 0x0, 0x0, 0x0, 8+4,
+ /* sense key specific: SKSV=1, C/D*=0, bitp=7 bytep=34 */
+ 0x2, 0x6, 0x0, 0x0, 0x8f, 0x0, 0x34, 0x0,
+ /* field replaceable code=0x45 */
+ 0x3, 0x2, 0x0, 0x45,
+ };
-static void usage()
+
+static void
+usage()
{
fprintf(stderr, "Usage: "
- "tst_sg_lib [--help] [--verbose] [--version]\n"
- " where: --help|-h print out usage message\n"
+ "tst_sg_lib [--dstrhex] [--help] [--printf] [--sense] "
+ "[--verbose]\n"
+ " [--version]\n"
+ " where: --dstrhex|-d test dStrHex* variants\n"
+ " --help|-h print out usage message\n"
+ " --printf|-p test library printf variants\n"
+ " --sense|-s test sense data handling\n"
" --verbose|-v increase verbosity\n"
" --version|-V print version string and exit\n\n"
- "xxxxxxxxxxxxxxxxxxxxxxxx\n"
+ "Test various parts of sg_lib, see options\n"
);
}
@@ -89,26 +107,41 @@ my_snprintf(char * cp, int cp_max_len, const char * fmt, ...)
return (n < cp_max_len) ? n : (cp_max_len - 1);
}
-int main(int argc, char * argv[])
+
+int
+main(int argc, char * argv[])
{
- int c, n, len;
+ int k, c, n, len;
+ int do_dstrhex = 0;
+ int do_printf = 0;
+ int do_sense = 0;
+ int did_something = 0;
int verbose = 0;
- int ret = 1;
+ int ret = 0;
char b[2048];
while (1) {
int option_index = 0;
- c = getopt_long(argc, argv, "hvV", long_options,
+ c = getopt_long(argc, argv, "dhpsvV", long_options,
&option_index);
if (c == -1)
break;
switch (c) {
+ case 'd':
+ ++do_dstrhex;
+ break;
case 'h':
case '?':
usage();
return 0;
+ case 'p':
+ ++do_printf;
+ break;
+ case 's':
+ ++do_sense;
+ break;
case 'v':
++verbose;
break;
@@ -131,96 +164,122 @@ int main(int argc, char * argv[])
}
}
- printf("Testing my_snprintf():\n");
- sg_print_sense("desc_sense_data test", desc_sense_data, (int)sizeof(desc_sense_data), 1);
- printf("\n");
-
+ if (do_sense ) {
+ ++did_something;
+ sg_print_sense("desc_sense_data test1", desc_sense_data1,
+ (int)sizeof(desc_sense_data1), 1);
+ printf("\n");
#if 1
- sg_get_sense_str("sg_get_sense_str", desc_sense_data, sizeof(desc_sense_data), 1, sizeof(b), b);
- printf("sg_get_sense_str: strlen(b)->%zd\n", strlen(b));
- printf("%s", b);
- printf("\n");
+ sg_get_sense_str("sg_get_sense_str(ds_data1)", desc_sense_data1,
+ sizeof(desc_sense_data1), 1, sizeof(b), b);
+ printf("sg_get_sense_str: strlen(b)->%zd\n", strlen(b));
+ printf("%s", b);
+ printf("\n");
#endif
+ sg_print_sense("desc_sense_data test2", desc_sense_data2,
+ (int)sizeof(desc_sense_data2), 1);
+ printf("\n");
+ }
+
+ if (do_printf) {
+ ++did_something;
+ printf("Testing my_snprintf():\n");
+ b[0] = '\0';
+ len = sizeof(b);
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = -1;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
- b[0] = '\0';
- len = sizeof(b);
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = -1;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 0;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 1;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 2;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 3;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 4;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 5;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 6;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
-
- b[0] = '\0';
- len = 7;
- n = my_snprintf(b, len, "%s", "test");
- printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
- len, n, strlen(b));
- if (strlen(b) > 0)
- printf("Resulting string: %s\n", b);
+ b[0] = '\0';
+ len = 0;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 1;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 2;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 3;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 4;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 5;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 6;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+
+ b[0] = '\0';
+ len = 7;
+ n = my_snprintf(b, len, "%s", "test");
+ printf("my_snprintf(,%d,,\"test\") -> %d; strlen(b) -> %zd\n",
+ len, n, strlen(b));
+ if (strlen(b) > 0)
+ printf("Resulting string: %s\n", b);
+ }
+ if (do_dstrhex) {
+ char b[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
+ 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58};
+
+ ++did_something;
+ for (k = 0; k < 18; ++k) {
+ printf("k=%d:\n", k);
+ dStrHex(b, k, 0);
+ dStrHex(b, k, 1);
+ dStrHex(b, k, -1);
+ printf("\n");
+ }
+ }
+ if (0 == did_something)
+ printf("Looks like no tests done, check usage with '-h'\n");
return ret;
}