* net.c (printcmsghdr): Skip control messages of zero length.
Always print "msg_control=" before the control message.
(do_msghdr): Print control message before its length, not after.
* tests/inet-cmsg.c (main): Update expected output.
* tests/scm_rights-fd.test: Likewise.
#endif
sizeof(struct cmsghdr);
+ if (!len)
+ return;
+ tprints(", msg_control=");
+
char *buf = len < cmsg_size ? NULL : malloc(len);
if (!buf || umoven(tcp, addr, len, buf) < 0) {
- tprints(", msg_control=");
printaddr(addr);
free(buf);
return;
union_cmsghdr u = { .ptr = buf };
- tprints(", [");
+ tprints("[");
while (len >= cmsg_size) {
size_t cmsg_len =
#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
tprint_iov_upto(tcp, (unsigned long)msg->msg_iovlen,
(unsigned long)msg->msg_iov, IOV_DECODE_STR, data_size);
- tprintf(", msg_controllen=%lu", (unsigned long)msg->msg_controllen);
- if (msg->msg_controllen)
- printcmsghdr(tcp, (unsigned long) msg->msg_control,
- msg->msg_controllen);
+ printcmsghdr(tcp, (unsigned long) msg->msg_control,
+ msg->msg_controllen);
+ tprintf(", msg_controllen=%lu", (unsigned long) msg->msg_controllen);
+
tprints(", msg_flags=");
printflags(msg_flags, msg->msg_flags, "MSG_???");
tprints("}");
assert(!close(0));
printf("recvmsg(0, {msg_name(%u)={sa_family=AF_INET, sin_port=htons(%u)"
- ", sin_addr=inet_addr(\"127.0.0.1\")}, msg_iov(1)=[{\"%s\", %zu}]"
- ", msg_controllen=%lu, [",
+ ", sin_addr=inet_addr(\"127.0.0.1\")}, msg_iov(1)=[{\"%s\", %u}]"
+ ", msg_control=[",
(unsigned) mh.msg_namelen, ntohs(addr.sin_port),
- data, size, (unsigned long) mh.msg_controllen);
+ data, (unsigned) size);
struct cmsghdr *c;
for (c = CMSG_FIRSTHDR(&mh); c; c = CMSG_NXTHDR(&mh, c)) {
}
printf("}");
}
- printf("], msg_flags=0}, 0) = %zu\n", size);
+ printf("], msg_controllen=%lu, msg_flags=0}, 0) = %u\n",
+ (unsigned long) mh.msg_controllen, (unsigned) size);
puts("+++ exited with 0 +++");
return 0;
iov='\[\{"'"$sample"'", 15\}\]'
ids='\{pid='"$n"', uid=[0-9]+, gid=[0-9]+\}'
-msg='\{msg_name\(0\)=NULL, msg_iov\(1\)='"$iov"', msg_controllen='"$n"
+msg_head='\{msg_name\(0\)=NULL, msg_iov\(1\)='"$iov"', msg_control='
+msg_tail=', msg_controllen='"$n"', msg_flags=0'
rights='\{cmsg_len='"$n"', cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, '"$rights_data"'\}'
creds='\{cmsg_len='"$n"', cmsg_level=SOL_SOCKET, cmsg_type=SCM_CREDENTIALS, '"$ids"'\}'
EXPECTED="$LOG.expected"
cat > "$EXPECTED" << __EOF__
-sendmsg\\(3$socket, $msg, \\[$rights\\], msg_flags=0\\}, 0\\) = 15
-recvmsg\\(0$socket, $msg, \\[$creds, $rights\\], msg_flags=0\\}, 0\\) = 15
+sendmsg\\(3$socket, $msg_head\\[$rights\\]$msg_tail\\}, 0\\) = 15
+recvmsg\\(0$socket, $msg_head\\[$creds, $rights\\]$msg_tail\\}, 0\\) = 15
__EOF__
match_grep "$LOG" "$EXPECTED"