* nlattr.c (decode_nlattr_with_data): Replace printstrn with printstr_ex and set QUOTE_FORCE_HEX flag. * tests/print_quoted_string.c (print_quoted_hex): New function. * tests/test_nlattr.h (print_quoted_hex): New prototype. * tests/tests.h (TEST_NLATTR_OBJECT, TEST_NLATTR_ARRAY): Use it for update expected output. * tests/nlattr.c: Update expected output. --- nlattr.c | 3 ++- tests/nlattr.c | 3 ++- tests/print_quoted_string.c | 11 +++++++++++ tests/test_nlattr.h | 4 ++-- tests/tests.h | 3 +++ 5 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/nlattr.c b/nlattr.c index ef3d762..00f8924 100644 --- a/nlattr.c +++ b/nlattr.c @@ -86,7 +86,8 @@ decode_nlattr_with_data(struct tcb *const tcp, || !decoders[nla->nla_type](tcp, addr + NLA_HDRLEN, nla_len - NLA_HDRLEN, opaque_data)) - printstrn(tcp, addr + NLA_HDRLEN, len - NLA_HDRLEN); + printstr_ex(tcp, addr + NLA_HDRLEN, + len - NLA_HDRLEN, QUOTE_FORCE_HEX); tprints("}"); } } diff --git a/tests/nlattr.c b/tests/nlattr.c index 7361ece..ae3ad4d 100644 --- a/tests/nlattr.c +++ b/tests/nlattr.c @@ -133,7 +133,8 @@ test_nlattr(const int fd) ", flags=NLM_F_DUMP, seq=0, pid=0}, {udiag_family=AF_UNIX" ", udiag_type=SOCK_STREAM, udiag_state=TCP_FIN_WAIT1" ", udiag_ino=0, udiag_cookie=[0, 0]}, {{nla_len=%u" - ", nla_type=%#x /* UNIX_DIAG_??? */}, \"1234\"}}" + ", nla_type=%#x /* UNIX_DIAG_??? */}" + ", \"\\x31\\x32\\x33\\x34\"}}" ", %u, MSG_DONTWAIT, NULL, 0) = %s\n", fd, msg_len, nla->nla_len, UNIX_DIAG_SHUTDOWN + 1, msg_len, sprintrc(rc)); diff --git a/tests/print_quoted_string.c b/tests/print_quoted_string.c index ea87d11..9103eed 100644 --- a/tests/print_quoted_string.c +++ b/tests/print_quoted_string.c @@ -75,3 +75,14 @@ print_quoted_memory(const char *instr, const size_t len) putchar('"'); } + +void +print_quoted_hex(const char *str, const size_t len) +{ + size_t i; + + printf("\""); + for (i = 0; i < len; i++) + printf("\\x%02x", str[i]); + printf("\""); +} diff --git a/tests/test_nlattr.h b/tests/test_nlattr.h index 466c138..24aeb60 100644 --- a/tests/test_nlattr.h +++ b/tests/test_nlattr.h @@ -108,7 +108,7 @@ print_nlattr(const unsigned int nla_len, const char *const nla_type) (nla_type_), #nla_type_, \ sizeof(obj_) - 1, \ (pattern_), sizeof(obj_) - 1, \ - printf("\"%.*s\"", plen, (pattern_))); \ + print_quoted_hex((pattern_), plen)); \ /* short read of sizeof(obj_) */ \ TEST_NLATTR_((fd_), (nlh0_), (hdrlen_), \ (init_msg_), (print_msg_), \ @@ -139,7 +139,7 @@ print_nlattr(const unsigned int nla_len, const char *const nla_type) (nla_type_), #nla_type_, \ sizeof((obj_)[0]) - 1, \ (pattern_), sizeof((obj_)[0]) - 1, \ - printf("\"%.*s\"", plen, (pattern_))); \ + print_quoted_hex((pattern_), plen)); \ /* sizeof((obj_)[0]) < len < sizeof(obj_) */ \ TEST_NLATTR_((fd_), (nlh0_), (hdrlen_), \ (init_msg_), (print_msg_), \ diff --git a/tests/tests.h b/tests/tests.h index 094f365..bc7dc98 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -137,6 +137,9 @@ void print_quoted_string(const char *); /* Print memory in a quoted form. */ void print_quoted_memory(const char *, size_t); +/* Print memory in a hexquoted form. */ +void print_quoted_hex(const char *, size_t); + /* Print time_t and nanoseconds in symbolic format. */ void print_time_t_nsec(time_t, unsigned long long, int); -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel