]> granicus.if.org Git - strace/commitdiff
net.c: use printaddr and umove_or_printaddr
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 19 Jul 2015 22:36:46 +0000 (22:36 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 20 Jul 2015 01:42:00 +0000 (01:42 +0000)
* net.c (printsock): Use printaddr and umove_or_printaddr.
(printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname,
sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred,
print_tpacket_stats, print_icmp_filter, print_getsockopt,
print_group_req, print_tpacket_req, print_packet_mreq,
print_setsockopt): Use printaddr.
(print_mreq, print_mreq6): Use umove_or_printaddr.

net.c

diff --git a/net.c b/net.c
index ef9a038c83b7bf8e5f0fedd03228b065761aa042..c1c36e3e0e14bd51dec0fcfd1a72874725252659 100644 (file)
--- a/net.c
+++ b/net.c
@@ -146,23 +146,12 @@ printsock(struct tcb *tcp, long addr, int addrlen)
        } addrbuf;
        char string_addr[100];
 
-       if (addr == 0) {
-               tprints("NULL");
-               return;
-       }
-       if (!verbose(tcp)) {
-               tprintf("%#lx", addr);
-               return;
-       }
-
        if (addrlen < 2 || addrlen > (int) sizeof(addrbuf))
                addrlen = sizeof(addrbuf);
 
        memset(&addrbuf, 0, sizeof(addrbuf));
-       if (umoven(tcp, addr, addrlen, addrbuf.pad) < 0) {
-               tprints("{...}");
+       if (umoven_or_printaddr(tcp, addr, addrlen, addrbuf.pad))
                return;
-       }
        addrbuf.pad[sizeof(addrbuf.pad) - 1] = '\0';
 
        tprints("{sa_family=");
@@ -363,7 +352,8 @@ printcmsghdr(struct tcb *tcp, unsigned long addr, size_t len)
 
        char *buf = len < cmsg_size ? NULL : malloc(len);
        if (!buf || umoven(tcp, addr, len, buf) < 0) {
-               tprintf(", msg_control=%#lx", addr);
+               tprints(", msg_control=");
+               printaddr(addr);
                free(buf);
                return;
        }
@@ -544,7 +534,7 @@ printmsghdr(struct tcb *tcp, long addr, unsigned long data_size)
        if (verbose(tcp) && extractmsghdr(tcp, addr, &msg))
                do_msghdr(tcp, &msg, data_size);
        else
-               tprintf("%#lx", addr);
+               printaddr(addr);
 }
 
 void
@@ -567,7 +557,7 @@ printmmsghdr(struct tcb *tcp, long addr, unsigned int idx, unsigned long msg_len
                tprintf(", %u}", mmsg.msg_len);
        }
        else
-               tprintf("%#lx", addr);
+               printaddr(addr);
 }
 
 static void
@@ -575,7 +565,7 @@ decode_mmsg(struct tcb *tcp, unsigned long msg_len)
 {
        /* mmsgvec */
        if (syserror(tcp)) {
-               tprintf("%#lx", tcp->u_arg[1]);
+               printaddr(tcp->u_arg[1]);
        } else {
                unsigned int len = tcp->u_rval;
                unsigned int i;
@@ -705,19 +695,18 @@ do_sockname(struct tcb *tcp, int flags_arg)
                tprints(", ");
                return 0;
        }
-       if (!tcp->u_arg[2])
-               tprintf("%#lx, NULL", tcp->u_arg[1]);
-       else {
-               int len;
-               if (tcp->u_arg[1] == 0 || syserror(tcp)
-                   || umove(tcp, tcp->u_arg[2], &len) < 0) {
-                       tprintf("%#lx", tcp->u_arg[1]);
-               } else {
-                       printsock(tcp, tcp->u_arg[1], len);
-               }
+
+       int len;
+       if (!tcp->u_arg[2] || !verbose(tcp) || syserror(tcp) ||
+           umove(tcp, tcp->u_arg[2], &len) < 0) {
+               printaddr(tcp->u_arg[1]);
                tprints(", ");
-               printnum_int(tcp, tcp->u_arg[2], "%u");
+               printaddr(tcp->u_arg[2]);
+       } else {
+               printsock(tcp, tcp->u_arg[1], len);
+               tprintf(", [%d]", len);
        }
+
        if (flags_arg >= 0) {
                tprints(", ");
                printflags(sock_type_flags, tcp->u_arg[flags_arg],
@@ -811,7 +800,7 @@ SYS_FUNC(recv)
                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);
 
@@ -842,22 +831,14 @@ SYS_FUNC(recvfrom)
                /* flags */
                printflags(msg_flags, tcp->u_arg[3], "MSG_???");
                /* from address, len */
-               if (!tcp->u_arg[4] || !tcp->u_arg[5]) {
-                       if (tcp->u_arg[4] == 0)
-                               tprints(", NULL");
-                       else
-                               tprintf(", %#lx", tcp->u_arg[4]);
-                       if (tcp->u_arg[5] == 0)
-                               tprints(", NULL");
-                       else
-                               tprintf(", %#lx", tcp->u_arg[5]);
-                       return 0;
-               }
-               if (umove(tcp, tcp->u_arg[5], &fromlen) < 0) {
-                       tprints(", {...}, [?]");
+               tprints(", ");
+               if (!tcp->u_arg[4] || !tcp->u_arg[5] ||
+                   umove(tcp, tcp->u_arg[5], &fromlen) < 0) {
+                       printaddr(tcp->u_arg[4]);
+                       tprints(", ");
+                       printaddr(tcp->u_arg[5]);
                        return 0;
                }
-               tprints(", ");
                printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]);
                /* from length */
                tprintf(", [%u]", fromlen);
@@ -874,7 +855,7 @@ SYS_FUNC(recvmsg)
                tprints(", ");
        } else {
                if (syserror(tcp))
-                       tprintf("%#lx", tcp->u_arg[1]);
+                       printaddr(tcp->u_arg[1]);
                else
                        printmsghdr(tcp, tcp->u_arg[1], tcp->u_rval);
                /* flags */
@@ -952,7 +933,7 @@ do_pipe(struct tcb *tcp, int flags_arg)
 {
        if (exiting(tcp)) {
                if (syserror(tcp)) {
-                       tprintf("%#lx", tcp->u_arg[0]);
+                       printaddr(tcp->u_arg[0]);
                } else {
 #ifdef HAVE_GETRVAL2
                        if (flags_arg < 0)
@@ -1053,7 +1034,7 @@ print_linger(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(linger) ||
            umove(tcp, addr, &linger) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
                return;
        }
 
@@ -1071,7 +1052,7 @@ print_ucred(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(uc) ||
            umove(tcp, addr, &uc) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        } else {
                tprintf("{pid=%u, uid=%u, gid=%u}",
                        (unsigned) uc.pid,
@@ -1089,7 +1070,7 @@ print_tpacket_stats(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(stats) ||
            umove(tcp, addr, &stats) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        } else {
                tprintf("{packets=%u, drops=%u}",
                        stats.tp_packets,
@@ -1108,7 +1089,7 @@ print_icmp_filter(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(filter) ||
            umove(tcp, addr, &filter) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
                return;
        }
 
@@ -1168,7 +1149,7 @@ print_getsockopt(struct tcb *tcp, int level, int name, long addr, int len)
                        printstr(tcp, addr, len);
                }
        } else {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        }
 done:
        tprintf(", [%d]", len);
@@ -1203,10 +1184,9 @@ print_mreq(struct tcb *tcp, long addr, unsigned int len)
                printstr(tcp, addr, len);
                return;
        }
-       if (umove(tcp, addr, &mreq) < 0) {
-               tprintf("%#lx", addr);
+       if (umove_or_printaddr(tcp, addr, &mreq))
                return;
-       }
+
        tprints("{imr_multiaddr=inet_addr(");
        print_quoted_string(inet_ntoa(mreq.imr_multiaddr),
                            16, QUOTE_0_TERMINATED);
@@ -1226,10 +1206,8 @@ print_mreq6(struct tcb *tcp, long addr, unsigned int len)
        if (len < sizeof(mreq))
                goto fail;
 
-       if (umove(tcp, addr, &mreq) < 0) {
-               tprintf("%#lx", addr);
+       if (umove_or_printaddr(tcp, addr, &mreq))
                return;
-       }
 
 #ifdef HAVE_INET_NTOP
        const struct in6_addr *in6 = &mreq.ipv6mr_multiaddr;
@@ -1259,7 +1237,7 @@ print_group_req(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(greq) ||
            umove(tcp, addr, &greq) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
                return;
        }
 
@@ -1309,7 +1287,7 @@ print_tpacket_req(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(req) ||
            umove(tcp, addr, &req) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        } else {
                tprintf("{block_size=%u, block_nr=%u, "
                        "frame_size=%u, frame_nr=%u}",
@@ -1331,7 +1309,7 @@ print_packet_mreq(struct tcb *tcp, long addr, int len)
 
        if (len != sizeof(mreq) ||
            umove(tcp, addr, &mreq) < 0) {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        } else {
                unsigned int i;
 
@@ -1435,7 +1413,7 @@ print_setsockopt(struct tcb *tcp, int level, int name, long addr, int len)
                        printstr(tcp, addr, len);
                }
        } else {
-               tprintf("%#lx", addr);
+               printaddr(addr);
        }
 done:
        tprintf(", %d", len);