From: Dmitry V. Levin Date: Mon, 20 Jul 2015 11:06:54 +0000 (+0000) Subject: io.c: use printaddr and umove_or_printaddr X-Git-Tag: v4.11~381 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=43b5a1f985d475e92f1a8563dbf6a5cf4cc01c60;p=strace io.c: use printaddr and umove_or_printaddr * io.c (sys_read, sys_pread): Use printaddr. (tprint_iov_upto): Do not fetch data in case of syserror. Use printaddr. (sys_readv, sys_preadv): Remove redundant check for syserror. (print_off_t): Use printnum_int and printnum_long. (print_loff_t): Use umove_or_printaddr. --- diff --git a/io.c b/io.c index eec496ad..16ce229f 100644 --- a/io.c +++ b/io.c @@ -39,7 +39,7 @@ SYS_FUNC(read) tprints(", "); } else { if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[1]); + printaddr(tcp->u_arg[1]); else printstr(tcp, tcp->u_arg[1], tcp->u_rval); tprintf(", %lu", tcp->u_arg[2]); @@ -83,7 +83,6 @@ tprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, int deco #define iov_iov_len iov.iov_len #endif unsigned long size, cur, end, abbrev_end; - int failed = 0; if (!len) { tprints("[]"); @@ -91,8 +90,9 @@ tprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, int deco } size = len * sizeof_iov; end = addr + size; - if (!verbose(tcp) || size / sizeof_iov != len || end < addr) { - tprintf("%#lx", addr); + if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || + !addr || size / sizeof_iov != len || end < addr) { + printaddr(addr); return; } if (abbrev(tcp)) { @@ -110,11 +110,8 @@ tprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, int deco tprints("..."); break; } - if (umoven(tcp, cur, sizeof_iov, &iov) < 0) { - tprints("?"); - failed = 1; + if (umoven_or_printaddr(tcp, cur, sizeof_iov, &iov)) break; - } tprints("{"); if (decode_iov) { unsigned long len = iov_iov_len; @@ -123,12 +120,10 @@ tprint_iov_upto(struct tcb *tcp, unsigned long len, unsigned long addr, int deco data_size -= len; printstr(tcp, (long) iov_iov_base, len); } else - tprintf("%#lx", (long) iov_iov_base); + printaddr((long) iov_iov_base); tprintf(", %lu}", (unsigned long)iov_iov_len); } tprints("]"); - if (failed) - tprintf(" %#lx", addr); #undef sizeof_iov #undef iov_iov_base #undef iov_iov_len @@ -146,11 +141,6 @@ SYS_FUNC(readv) printfd(tcp, tcp->u_arg[0]); tprints(", "); } else { - if (syserror(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], 1); tprintf(", %lu", tcp->u_arg[2]); } @@ -186,7 +176,7 @@ SYS_FUNC(pread) tprints(", "); } else { if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[1]); + printaddr(tcp->u_arg[1]); else printstr(tcp, tcp->u_arg[1], tcp->u_rval); tprintf(", %lu, ", tcp->u_arg[2]); @@ -239,10 +229,6 @@ SYS_FUNC(preadv) printfd(tcp, tcp->u_arg[0]); tprints(", "); } else { - if (syserror(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], 1); tprintf(", %lu, ", tcp->u_arg[2]); print_llu_from_low_high_val(tcp, 3); @@ -265,27 +251,10 @@ SYS_FUNC(pwritev) static void print_off_t(struct tcb *tcp, long addr) { - unsigned long offset; - - if (!addr) { - tprints("NULL"); - return; - } - -#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 - if (current_wordsize == 4) { - uint32_t off; - - if (umove(tcp, addr, &off) < 0) - tprintf("%#lx", addr); - else - tprintf("[%u]", off); - } else -#endif - if (umove(tcp, addr, &offset) < 0) - tprintf("%#lx", addr); + if (current_wordsize == sizeof(int)) + printnum_int(tcp, addr, "%u"); else - tprintf("[%lu]", offset); + printnum_long(tcp, addr, "%lu"); } SYS_FUNC(sendfile) @@ -306,11 +275,7 @@ print_loff_t(struct tcb *tcp, long addr) { loff_t offset; - if (!addr) - tprints("NULL"); - else if (umove(tcp, addr, &offset) < 0) - tprintf("%#lx", addr); - else + if (!umove_or_printaddr(tcp, addr, &offset)) tprintf("[%llu]", (unsigned long long int) offset); }