]> granicus.if.org Git - strace/commitdiff
Add argument to tprint_iov() specifying whether to decode each iovec
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 13 Jun 2011 22:58:44 +0000 (22:58 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 13 Jun 2011 22:58:44 +0000 (22:58 +0000)
* 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.

defs.h
io.c
net.c

diff --git a/defs.h b/defs.h
index 2c086357b66374c6d119df03cdffb0ed7fe3efdc..7ffc3f4e98ff60e6760fb71fcdbefeb89b2a319d 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -584,7 +584,7 @@ extern void printleader(struct tcb *);
 extern void printtrailer(void);
 extern void tabto(int);
 extern void call_summary(FILE *);
-extern void tprint_iov(struct tcb *, unsigned long, unsigned long);
+extern void tprint_iov(struct tcb *, unsigned long, unsigned long, int decode_iov);
 extern void tprint_open_modes(mode_t);
 extern const char *sprint_open_modes(mode_t);
 extern int is_restart_error(struct tcb *);
diff --git a/io.c b/io.c
index d94fb26512d394ed76d481196d17694a03789db0..7f2f243fed0cb026f8a63b03a926346b62813179 100644 (file)
--- a/io.c
+++ b/io.c
@@ -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);
        }
diff --git a/net.c b/net.c
index 0d8e22d8e510ac59e9ab2a4bcba4fdc4e72e6bae..c9c184788abb835e4fa4c54d275ef716388f4a78 100644 (file)
--- a/net.c
+++ b/net.c
@@ -1409,7 +1409,7 @@ do_msghdr(struct tcb *tcp, struct msghdr *msg)
 
        tprintf(", msg_iov(%lu)=", (unsigned long)msg->msg_iovlen);
        tprint_iov(tcp, (unsigned long)msg->msg_iovlen,
-                  (unsigned long)msg->msg_iov);
+                  (unsigned long)msg->msg_iov, 1);
 
 #ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
        tprintf(", msg_controllen=%lu", (unsigned long)msg->msg_controllen);