diff options
author | Dmitry V. Levin <ldv@strace.io> | 2021-04-23 08:00:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2021-04-23 08:00:00 +0000 |
commit | 2525d70ee64812dcd8db4df65a412ffcf09df825 (patch) | |
tree | ef848196373f9aac6b6980e32f4d2b497f68a053 | |
parent | 99bc41856a05c87794fc79fc2c6aba262b346ed3 (diff) | |
download | strace-2525d70ee64812dcd8db4df65a412ffcf09df825.tar.gz |
msghdr: use print_local_array_ex
* src/defs.h (print_xint8_array_member): New prototype.
* src/util.c (print_xint8_array_member): New function.
* src/msghdr.c (print_scm_rights, print_cmsg_uint): Rewrite using
print_local_array_ex.
(print_cmsg_xint8_t): New function.
(print_cmsg_uint8_t, print_cmsg_ip_opts): Remove.
(cmsg_ip_printers): Replace print_cmsg_uint8_t and print_cmsg_ip_opts
with print_cmsg_xint8_t.
* tests/inet-cmsg.c (print_opts): Update expected output by printing
bytes using "%#x" format instead of "0x%02x".
-rw-r--r-- | src/defs.h | 6 | ||||
-rw-r--r-- | src/msghdr.c | 51 | ||||
-rw-r--r-- | src/util.c | 17 | ||||
-rw-r--r-- | tests/inet-cmsg.c | 2 |
4 files changed, 28 insertions, 48 deletions
diff --git a/src/defs.h b/src/defs.h index 316bfd1d0..e86891193 100644 --- a/src/defs.h +++ b/src/defs.h @@ -925,14 +925,16 @@ extern bool print_int8_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); extern bool print_uint8_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); +extern bool print_xint8_array_member(struct tcb *, void *elem_buf, + size_t elem_size, void *data); extern bool print_int32_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); extern bool print_uint32_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); -extern bool print_uint64_array_member(struct tcb *, void *elem_buf, - size_t elem_size, void *data); extern bool print_xint32_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); +extern bool print_uint64_array_member(struct tcb *, void *elem_buf, + size_t elem_size, void *data); extern bool print_xint64_array_member(struct tcb *, void *elem_buf, size_t elem_size, void *data); extern bool print_fd_array_member(struct tcb *, void *elem_buf, diff --git a/src/msghdr.c b/src/msghdr.c index 9a5c03f62..722d10948 100644 --- a/src/msghdr.c +++ b/src/msghdr.c @@ -45,21 +45,10 @@ print_scm_rights(struct tcb *tcp, const void *cmsg_data, { const int *fds = cmsg_data; const unsigned int nfds = data_len / sizeof(*fds); - unsigned int i; - tprints("["); - - for (i = 0; i < nfds; ++i) { - if (i) - tprints(", "); - if (abbrev(tcp) && i >= max_strlen) { - tprint_more_data_follows(); - break; - } - printfd(tcp, fds[i]); - } + print_local_array_ex(tcp, fds, nfds, sizeof(*fds), + print_fd_array_member, NULL, 0, NULL, NULL); - tprints("]"); } static void @@ -166,36 +155,16 @@ print_cmsg_uint(struct tcb *tcp, const void *cmsg_data, { const unsigned int *p = cmsg_data; - tprintf("[%u]", *p); -} - -static void -print_cmsg_uint8_t(struct tcb *tcp, const void *cmsg_data, - const unsigned int data_len) -{ - const uint8_t *p = cmsg_data; - - tprintf("[%#x]", *p); + print_local_array_ex(tcp, p, data_len / sizeof(*p), sizeof(*p), + print_uint32_array_member, NULL, 0, NULL, NULL); } static void -print_cmsg_ip_opts(struct tcb *tcp, const void *cmsg_data, +print_cmsg_xint8_t(struct tcb *tcp, const void *cmsg_data, const unsigned int data_len) { - const unsigned char *opts = cmsg_data; - unsigned int i; - - tprints("["); - for (i = 0; i < data_len; ++i) { - if (i) - tprints(", "); - if (abbrev(tcp) && i >= max_strlen) { - tprint_more_data_follows(); - break; - } - tprintf("0x%02x", opts[i]); - } - tprints("]"); + print_local_array_ex(tcp, cmsg_data, data_len, 1, + print_xint8_array_member, NULL, 0, NULL, NULL); } struct sock_ee { @@ -261,9 +230,9 @@ static const struct { }, cmsg_ip_printers[] = { [IP_PKTINFO] = { print_cmsg_ip_pktinfo, sizeof(struct in_pktinfo) }, [IP_TTL] = { print_cmsg_uint, sizeof(unsigned int) }, - [IP_TOS] = { print_cmsg_uint8_t, 1 }, - [IP_RECVOPTS] = { print_cmsg_ip_opts, 1 }, - [IP_RETOPTS] = { print_cmsg_ip_opts, 1 }, + [IP_TOS] = { print_cmsg_xint8_t, 1 }, + [IP_RECVOPTS] = { print_cmsg_xint8_t, 1 }, + [IP_RETOPTS] = { print_cmsg_xint8_t, 1 }, [IP_RECVERR] = { print_cmsg_ip_recverr, sizeof(struct sock_ee) }, [IP_ORIGDSTADDR] = { print_cmsg_ip_origdstaddr, sizeof(struct sockaddr_in) }, [IP_CHECKSUM] = { print_cmsg_uint, sizeof(unsigned int) }, diff --git a/src/util.c b/src/util.c index 51b81c83c..e87ac94b0 100644 --- a/src/util.c +++ b/src/util.c @@ -1358,6 +1358,15 @@ print_uint8_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, } bool +print_xint8_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, + void *data) +{ + tprintf("%#" PRIx8, *(uint8_t *) elem_buf); + + return true; +} + +bool print_int32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) { @@ -1376,19 +1385,19 @@ print_uint32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, } bool -print_uint64_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, +print_xint32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) { - tprintf("%" PRIu64, *(uint64_t *) elem_buf); + tprintf("%#" PRIx32, *(uint32_t *) elem_buf); return true; } bool -print_xint32_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, +print_uint64_array_member(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) { - tprintf("%#" PRIx32, *(uint32_t *) elem_buf); + tprintf("%" PRIu64, *(uint64_t *) elem_buf); return true; } diff --git a/tests/inet-cmsg.c b/tests/inet-cmsg.c index fc1aa4837..ca30bc0a5 100644 --- a/tests/inet-cmsg.c +++ b/tests/inet-cmsg.c @@ -52,7 +52,7 @@ print_opts(const char *name, const struct cmsghdr *c) printf(", cmsg_data=["); size_t i; for (i = 0; i < len; ++i) - printf("%s0x%02x", i ? ", " : "", opts[i]); + printf("%s%#x", i ? ", " : "", opts[i]); printf("]"); } } |