diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2014-04-28 04:52:47 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2014-04-28 04:52:47 +0000 |
commit | af4e550a23d9b53e9b86acf3ce186d3890efd85f (patch) | |
tree | b007e79adea92490ba81be9b8e38238865bdc55e /utils | |
parent | d43013ef6274b5797cfc340ecf0f49b7e5bce5ae (diff) | |
download | sg3_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.c | 257 |
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; } |