summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@strace.io>2021-04-23 08:00:00 +0000
committerDmitry V. Levin <ldv@strace.io>2021-04-23 08:00:00 +0000
commit2525d70ee64812dcd8db4df65a412ffcf09df825 (patch)
treeef848196373f9aac6b6980e32f4d2b497f68a053
parent99bc41856a05c87794fc79fc2c6aba262b346ed3 (diff)
downloadstrace-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.h6
-rw-r--r--src/msghdr.c51
-rw-r--r--src/util.c17
-rw-r--r--tests/inet-cmsg.c2
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("]");
}
}