diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2011-06-13 22:58:44 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2011-06-13 22:58:44 +0000 |
commit | 8884968a46f5413345de7b0085388a367eb9caae (patch) | |
tree | 6ea133fb5d4d5983df6fc09ebcd872bc363b50b6 /io.c | |
parent | fcda7a5f4fcfbedb5493bbfc1b37e53c6b3a575c (diff) | |
download | strace-8884968a46f5413345de7b0085388a367eb9caae.tar.gz strace-8884968a46f5413345de7b0085388a367eb9caae.tar.bz2 strace-8884968a46f5413345de7b0085388a367eb9caae.tar.xz |
Add argument to tprint_iov() specifying whether to decode each iovec
* defs.h (tprint_iov): Add decode_iov argument.
* io.c (tprint_iov): Implement new decode_iov argument.
(sys_readv, sys_writev, sys_sendfile, sys_preadv, sys_pwritev): Update
tprint_iov calls.
* net.c (do_msghdr): Likewise.
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -76,7 +76,7 @@ sys_write(struct tcb *tcp) #if HAVE_SYS_UIO_H void -tprint_iov(struct tcb *tcp, unsigned long len, unsigned long addr) +tprint_iov(struct tcb *tcp, unsigned long len, unsigned long addr, int decode_iov) { #if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 union { @@ -132,7 +132,10 @@ tprint_iov(struct tcb *tcp, unsigned long len, unsigned long addr) break; } tprintf("{"); - printstr(tcp, (long) iov_iov_base, iov_iov_len); + if (decode_iov) + printstr(tcp, (long) iov_iov_base, iov_iov_len); + else + tprintf("%#lx", (long) iov_iov_base); tprintf(", %lu}", (unsigned long)iov_iov_len); } tprintf("]"); @@ -155,7 +158,7 @@ sys_readv(struct tcb *tcp) tcp->u_arg[1], tcp->u_arg[2]); return 0; } - tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]); + tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); tprintf(", %lu", tcp->u_arg[2]); } return 0; @@ -167,7 +170,7 @@ sys_writev(struct tcb *tcp) if (entering(tcp)) { printfd(tcp, tcp->u_arg[0]); tprintf(", "); - tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]); + tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); tprintf(", %lu", tcp->u_arg[2]); } return 0; @@ -243,9 +246,9 @@ sys_sendfile(struct tcb *tcp) tprintf(", %#lx", tcp->u_arg[5]); else { tprintf(", { "); - tprint_iov(tcp, hdtr.hdr_cnt, hdtr.headers); + tprint_iov(tcp, hdtr.hdr_cnt, hdtr.headers, 1); tprintf(", %u, ", hdtr.hdr_cnt); - tprint_iov(tcp, hdtr.trl_cnt, hdtr.trailers); + tprint_iov(tcp, hdtr.trl_cnt, hdtr.trailers, 1); tprintf(", %u }", hdtr.hdr_cnt); } } @@ -316,7 +319,7 @@ sys_preadv(struct tcb *tcp) tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]); return 0; } - tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]); + tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); tprintf(", %lu, ", tcp->u_arg[2]); printllval(tcp, "%llu", PREAD_OFFSET_ARG); } @@ -329,7 +332,7 @@ sys_pwritev(struct tcb *tcp) if (entering(tcp)) { printfd(tcp, tcp->u_arg[0]); tprintf(", "); - tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1]); + tprint_iov(tcp, tcp->u_arg[2], tcp->u_arg[1], 1); tprintf(", %lu, ", tcp->u_arg[2]); printllval(tcp, "%llu", PREAD_OFFSET_ARG); } |