struct print_struct_mmsghdr_config {
const int *p_user_msg_namelen;
+ unsigned int msg_len_vlen;
unsigned int count;
bool use_msg_len;
};
tprints("{msg_hdr=");
print_struct_msghdr(tcp, &mmsg->msg_hdr, c->p_user_msg_namelen,
c->use_msg_len ? mmsg->msg_len : -1UL);
- tprintf(", msg_len=%u}", mmsg->msg_len);
+ if (c->msg_len_vlen) {
+ tprintf(", msg_len=%u", mmsg->msg_len);
+ --c->msg_len_vlen;
+ }
+ tprints("}");
if (c->p_user_msg_namelen)
++c->p_user_msg_namelen;
static void
decode_mmsgvec(struct tcb *tcp, const unsigned long addr,
- const unsigned int len, const bool use_msg_len)
+ const unsigned int vlen, const unsigned int msg_len_vlen,
+ const bool use_msg_len)
{
struct mmsghdr mmsg;
struct print_struct_mmsghdr_config c = {
+ .msg_len_vlen = msg_len_vlen,
.count = IOV_MAX,
.use_msg_len = use_msg_len
};
c.p_user_msg_namelen = data->namelen;
}
- print_array(tcp, addr, len, &mmsg, sizeof_struct_mmsghdr(),
+ print_array(tcp, addr, vlen, &mmsg, sizeof_struct_mmsghdr(),
fetch_struct_mmsghdr_or_printaddr,
print_struct_mmsghdr, &c);
}
return RVAL_DECODED;
}
} else {
- decode_mmsgvec(tcp, tcp->u_arg[1], tcp->u_rval, false);
+ decode_mmsgvec(tcp, tcp->u_arg[1], tcp->u_arg[2],
+ tcp->u_rval, false);
/* vlen */
tprintf(", %u, ", (unsigned int) tcp->u_arg[2]);
/* flags */
return 0;
} else {
if (verbose(tcp)) {
- decode_mmsgvec(tcp, tcp->u_arg[1], tcp->u_rval, true);
+ decode_mmsgvec(tcp, tcp->u_arg[1], tcp->u_rval,
+ tcp->u_rval, true);
/* vlen */
tprintf(", %u, ", (unsigned int) tcp->u_arg[2]);
/* flags */
perror_msg_and_skip("sendmmsg");
printf("sendmmsg(%d, [", send_fd);
- for (i = 0; i < rc; ++i) {
+ for (i = 0; i < IOV_MAX1; ++i) {
if (i)
printf(", ");
+ if (i >= IOV_MAX
#ifndef VERBOSE_MMSGHDR
- if (i >= DEFAULT_STRLEN) {
+ || i >= DEFAULT_STRLEN
+#endif
+ ) {
printf("...");
break;
}
-#endif
printf("{msg_hdr={msg_name=NULL, msg_namelen=0"
", msg_iov=[{iov_base=\"%c\", iov_len=1}]"
- ", msg_iovlen=1, msg_controllen=0, msg_flags=0}"
- ", msg_len=1}", '0' + i % 10);
+ ", msg_iovlen=1, msg_controllen=0, msg_flags=0}%s}",
+ '0' + i % 10,
+ i < rc ? ", msg_len=1" : "");
}
printf("], %u, MSG_DONTWAIT) = %d\n", IOV_MAX1, rc);