From: Dmitry V. Levin Date: Thu, 8 Oct 2009 23:33:15 +0000 (+0000) Subject: Enhance msgsnd() parser X-Git-Tag: v4.5.19~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=783f5bc24c7ce99739f1e1cd71060fda26aa43e3;p=strace Enhance msgsnd() parser * ipc.c (tprint_msgsnd): New function. Move msgsnd parser code here, add check for umove() return code. (sys_msgsnd): Use tprint_msgsnd(). --- diff --git a/ipc.c b/ipc.c index 8ed1900b..c0f4bb8d 100644 --- a/ipc.c +++ b/ipc.c @@ -211,29 +211,30 @@ struct tcb *tcp; return 0; } -int sys_msgsnd(tcp) -struct tcb *tcp; +static void +tprint_msgsnd(struct tcb *tcp, long addr, unsigned long count) { long mtype; + if (umove(tcp, addr, &mtype) < 0) { + tprintf("%#lx", addr); + } else { + tprintf("{%lu, ", mtype); + printstr(tcp, addr + sizeof(mtype), count); + tprintf("}"); + } + tprintf(", %lu, ", count); + printflags(msg_flags, tcp->u_arg[3], "MSG_???"); +} + +int sys_msgsnd(struct tcb *tcp) +{ if (entering(tcp)) { - tprintf("%lu", tcp->u_arg[0]); + tprintf("%lu, ", tcp->u_arg[0]); if (indirect_ipccall(tcp)) { - umove(tcp, tcp->u_arg[3], &mtype); - tprintf(", {%lu, ", mtype); - printstr(tcp, tcp->u_arg[3] + sizeof(long), - tcp->u_arg[1]); - tprintf("}, %lu", tcp->u_arg[1]); - tprintf(", "); - printflags(msg_flags, tcp->u_arg[2], "MSG_???"); + tprint_msgsnd(tcp, tcp->u_arg[3], tcp->u_arg[1]); } else { - umove(tcp, tcp->u_arg[1], &mtype); - tprintf(", {%lu, ", mtype); - printstr(tcp, tcp->u_arg[1] + sizeof(long), - tcp->u_arg[2]); - tprintf("}, %lu", tcp->u_arg[2]); - tprintf(", "); - printflags(msg_flags, tcp->u_arg[3], "MSG_???"); + tprint_msgsnd(tcp, tcp->u_arg[1], tcp->u_arg[2]); } } return 0;