From: Dmitry V. Levin Date: Sun, 9 Jul 2017 18:43:34 +0000 (+0000) Subject: Mpersify struct group_req X-Git-Tag: v4.19~289 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=106a76ce812904120ef7d8654f323cd8255ffac5;p=strace Mpersify struct group_req The size of struct group_req depends on alignment of long and therefore has to be mpersified. * print_group_req.c: New file. * Makefile.am (strace_SOURCES): Add it. * net.c (print_group_req): Move to print_group_req.c, wrap into MPERS_PRINTER_DECL. --- diff --git a/Makefile.am b/Makefile.am index 9b966bc5..05c2475a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -200,6 +200,7 @@ strace_SOURCES = \ poll.c \ prctl.c \ print_dev_t.c \ + print_group_req.c \ print_fields.h \ print_ifindex.c \ print_mq_attr.c \ diff --git a/net.c b/net.c index ea1a3eb4..34a394db 100644 --- a/net.c +++ b/net.c @@ -682,23 +682,6 @@ print_mreq6(struct tcb *const tcp, const kernel_ulong_t addr, } #endif /* IPV6_ADD_MEMBERSHIP */ -#ifdef MCAST_JOIN_GROUP -static void -print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, - const int len) -{ - struct group_req greq; - - if (len < (int) sizeof(greq)) { - printaddr(addr); - } else if (!umove_or_printaddr(tcp, addr, &greq)) { - PRINT_FIELD_IFINDEX("{", greq, gr_interface); - PRINT_FIELD_SOCKADDR(", ", greq, gr_group); - tprints("}"); - } -} -#endif /* MCAST_JOIN_GROUP */ - #ifdef PACKET_RX_RING static void print_tpacket_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len) diff --git a/print_group_req.c b/print_group_req.c new file mode 100644 index 00000000..6b8e2a78 --- /dev/null +++ b/print_group_req.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2015-2017 The strace developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "defs.h" +#include + +#ifdef MCAST_JOIN_GROUP + +# include DEF_MPERS_TYPE(struct_group_req) +typedef struct group_req struct_group_req; + +#endif /* MCAST_JOIN_GROUP */ + +#include MPERS_DEFS + +#ifdef MCAST_JOIN_GROUP + +# include "print_fields.h" + +MPERS_PRINTER_DECL(void, print_group_req, struct tcb *const tcp, + const kernel_ulong_t addr, const int len) +{ + struct_group_req greq; + + if (len < (int) sizeof(greq)) { + printaddr(addr); + } else if (!umove_or_printaddr(tcp, addr, &greq)) { + PRINT_FIELD_IFINDEX("{", greq, gr_interface); + PRINT_FIELD_SOCKADDR(", ", greq, gr_group); + tprints("}"); + } +} + +#endif /* MCAST_JOIN_GROUP */