Fix recvmmsg decode: do not show more data than actually returned

This change complements recent fix for recvmsg decoding.

* net.c (printmmsghdr): Add msg_len parameter to pass down to do_msghdr.
When this parameter is zero, pass mmsghdr.msg_len to do_msghdr instead.
(decode_mmsg): Add msg_len parameter, pass it down to printmmsghdr.
(sys_sendmmsg): Call decode_mmsg with msg_len == (unsigned long) -1L.
(sys_recvmmsg): Call decode_mmsg with msg_len == 0.
diff --git a/net.c b/net.c
index 050b746..2911c73 100644
--- a/net.c
+++ b/net.c
@@ -1441,7 +1441,7 @@
 }
 
 static void
-printmmsghdr(struct tcb *tcp, long addr, unsigned int idx)
+printmmsghdr(struct tcb *tcp, long addr, unsigned int idx, unsigned long msg_len)
 {
 	struct mmsghdr {
 		struct msghdr msg_hdr;
@@ -1454,12 +1454,12 @@
 		return;
 	}
 	tprints("{");
-	do_msghdr(tcp, &mmsg.msg_hdr, (unsigned long) -1L);
+	do_msghdr(tcp, &mmsg.msg_hdr, msg_len ? msg_len : mmsg.msg_len);
 	tprintf(", %u}", mmsg.msg_len);
 }
 
 static void
-decode_mmsg(struct tcb *tcp)
+decode_mmsg(struct tcb *tcp, unsigned long msg_len)
 {
 	/* mmsgvec */
 	if (syserror(tcp)) {
@@ -1472,7 +1472,7 @@
 		for (i = 0; i < len; ++i) {
 			if (i)
 				tprints(", ");
-			printmmsghdr(tcp, tcp->u_arg[1], i);
+			printmmsghdr(tcp, tcp->u_arg[1], i, msg_len);
 		}
 		tprints("}");
 	}
@@ -1659,7 +1659,7 @@
 		}
 	} else {
 		if (verbose(tcp))
-			decode_mmsg(tcp);
+			decode_mmsg(tcp, (unsigned long) -1L);
 	}
 	return 0;
 }
@@ -1769,7 +1769,7 @@
 		return 0;
 	} else {
 		if (verbose(tcp)) {
-			decode_mmsg(tcp);
+			decode_mmsg(tcp, 0);
 			/* timeout on entrance */
 			tprintf(", %s", tcp->auxstr ? tcp->auxstr : "{...}");
 			free((void *) tcp->auxstr);