tests: use sprintrc in tests/netlink_protocol.c

* tests/netlink_protocol.c (main): Use sprintrc.
This commit is contained in:
2016-09-20 12:02:06 +00:00
parent 99f41c592d
commit b9bac78553

View File

@ -61,83 +61,65 @@ send_query(const int fd)
.magic = "abcd"
};
struct req *const req = tail_memdup(&c_req, sizeof(c_req));
long rc;
const char *errstr;
/* zero address */
if (sendto(fd, NULL, sizeof(*req), MSG_DONTWAIT, NULL, 0) != -1)
perror_msg_and_skip("sendto");
printf("sendto(%d, NULL, %u, MSG_DONTWAIT, NULL, 0) = -1 %s (%m)\n",
fd, (unsigned) sizeof(*req), errno2name());
rc = sendto(fd, NULL, sizeof(*req), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, NULL, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, (unsigned) sizeof(*req), sprintrc(rc));
/* zero length */
if (sendto(fd, req, 0, MSG_DONTWAIT, NULL, 0) != 0)
perror_msg_and_skip("sendto");
printf("sendto(%d, \"\", 0, MSG_DONTWAIT, NULL, 0) = 0\n", fd);
rc = sendto(fd, req, 0, MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, \"\", 0, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, sprintrc(rc));
/* zero address and length */
if (sendto(fd, NULL, 0, MSG_DONTWAIT, NULL, 0) != 0)
perror_msg_and_skip("sendto");
printf("sendto(%d, NULL, 0, MSG_DONTWAIT, NULL, 0) = 0\n", fd);
rc = sendto(fd, NULL, 0, MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, NULL, 0, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, sprintrc(rc));
/* unfetchable struct nlmsghdr */
const void *const efault = tail_alloc(sizeof(struct nlmsghdr) - 1);
sendto(fd, efault, sizeof(struct nlmsghdr), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, %p, %u, MSG_DONTWAIT, NULL, 0) = -1 EFAULT (%m)\n",
fd, efault, (unsigned) sizeof(struct nlmsghdr));
rc = sendto(fd, efault, sizeof(struct nlmsghdr), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, %p, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, efault, (unsigned) sizeof(struct nlmsghdr), sprintrc(rc));
/* whole message length < sizeof(struct nlmsghdr) */
if (sendto(fd, req->magic, sizeof(req->magic), MSG_DONTWAIT, NULL, 0)
!= (unsigned) sizeof(req->magic))
perror_msg_and_skip("sendto");
printf("sendto(%d, \"abcd\", %u, MSG_DONTWAIT, NULL, 0) = %u\n",
fd, (unsigned) sizeof(req->magic), (unsigned) sizeof(req->magic));
rc = sendto(fd, req->magic, sizeof(req->magic), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, \"abcd\", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, (unsigned) sizeof(req->magic), sprintrc(rc));
/* a single message with some data */
if (sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0) !=
(unsigned) sizeof(*req))
perror_msg_and_skip("sendto");
rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %u\n",
", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, req->nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(*req), (unsigned) sizeof(*req));
(unsigned) sizeof(*req), sprintrc(rc));
/* a single message without data */
req->nlh.nlmsg_len = sizeof(req->nlh);
if (sendto(fd, &req->nlh, sizeof(req->nlh), MSG_DONTWAIT, NULL, 0)
!= (unsigned) sizeof(req->nlh))
perror_msg_and_skip("sendto");
rc = sendto(fd, &req->nlh, sizeof(req->nlh), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}}, %u, MSG_DONTWAIT, NULL, 0) = %u\n",
", seq=0, pid=0}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, req->nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(req->nlh), (unsigned) sizeof(req->nlh));
(unsigned) sizeof(req->nlh), sprintrc(rc));
/* nlmsg_len > whole message length */
req->nlh.nlmsg_len = sizeof(*req) + 8;
if (sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0) !=
(unsigned) sizeof(*req))
perror_msg_and_skip("sendto");
rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %u\n",
", seq=0, pid=0}, \"abcd\"}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, req->nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(*req), (unsigned) sizeof(*req));
(unsigned) sizeof(*req), sprintrc(rc));
/* nlmsg_len < sizeof(struct nlmsghdr) */
req->nlh.nlmsg_len = 8;
if (sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0) != sizeof(*req))
perror_msg_and_skip("sendto");
rc = sendto(fd, req, sizeof(*req), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, {{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}}, %u, MSG_DONTWAIT, NULL, 0) = %u\n",
", seq=0, pid=0}}, %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, req->nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(*req), (unsigned) sizeof(*req));
(unsigned) sizeof(*req), sprintrc(rc));
/* a sequence of two nlmsg objects */
struct reqs {
@ -148,53 +130,47 @@ send_query(const int fd)
memcpy(&reqs->req1, &c_req, sizeof(c_req));
memcpy(&reqs->req2, &c_req, sizeof(c_req));
sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, {{len=%u, type=NLMSG_NOOP"
", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}, \"abcd\"}]"
", %u, MSG_DONTWAIT, NULL, 0) = %u\n",
", %u, MSG_DONTWAIT, NULL, 0) = %s\n",
fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(*reqs), (unsigned) sizeof(*reqs));
(unsigned) sizeof(*reqs), sprintrc(rc));
/* unfetchable second struct nlmsghdr */
void *const efault2 = tail_memdup(&reqs->req1, sizeof(reqs->req1));
sendto(fd, efault2, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
rc = sendto(fd, efault2, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, %p], %u, MSG_DONTWAIT, NULL, 0)"
" = -1 EFAULT (%m)\n",
" = %s\n",
fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
&((struct reqs *) efault2)->req2, (unsigned) sizeof(*reqs));
&((struct reqs *) efault2)->req2, (unsigned) sizeof(*reqs),
sprintrc(rc));
/* message length is not enough for the second struct nlmsghdr */
if (sendto(fd, reqs, sizeof(*reqs) - sizeof(req->nlh), MSG_DONTWAIT, NULL, 0)
!= sizeof(*reqs) - sizeof(req->nlh))
perror_msg_and_skip("sendto");
rc = sendto(fd, reqs, sizeof(*reqs) - sizeof(req->nlh), MSG_DONTWAIT,
NULL, 0);
errstr = sprintrc(rc);
printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, \"",
fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP);
print_quoted_memory((void *) &reqs->req2.nlh,
sizeof(reqs->req2) - sizeof(req->nlh));
printf("\"], %u, MSG_DONTWAIT, NULL, 0) = %u\n",
(unsigned) (sizeof(*reqs) - sizeof(req->nlh)),
(unsigned) (sizeof(*reqs) - sizeof(req->nlh)));
printf("\"], %u, MSG_DONTWAIT, NULL, 0) = %s\n",
(unsigned) (sizeof(*reqs) - sizeof(req->nlh)), errstr);
/* second nlmsg_len < sizeof(struct nlmsghdr) */
reqs->req2.nlh.nlmsg_len = 4;
if (sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0)
!= sizeof(*reqs))
perror_msg_and_skip("sendto");
rc = sendto(fd, reqs, sizeof(*reqs), MSG_DONTWAIT, NULL, 0);
printf("sendto(%d, [{{len=%u, type=NLMSG_NOOP, flags=NLM_F_REQUEST|0x%x"
", seq=0, pid=0}, \"abcd\"}, {{len=%u, type=NLMSG_NOOP"
", flags=NLM_F_REQUEST|0x%x, seq=0, pid=0}}], %u"
", MSG_DONTWAIT, NULL, 0) = %u\n",
", MSG_DONTWAIT, NULL, 0) = %s\n",
fd, reqs->req1.nlh.nlmsg_len, NLM_F_DUMP,
reqs->req2.nlh.nlmsg_len, NLM_F_DUMP,
(unsigned) sizeof(*reqs), (unsigned) sizeof(*reqs));
(unsigned) sizeof(*reqs), sprintrc(rc));
/* abbreviated output */
# define DEFAULT_STRLEN 32
@ -210,9 +186,8 @@ send_query(const int fd)
msgs[i].nlmsg_pid = 0;
}
if (sendto(fd, msgs, msg_len, MSG_DONTWAIT, NULL, 0) != (int) msg_len)
perror_msg_and_skip("sendto");
rc = sendto(fd, msgs, msg_len, MSG_DONTWAIT, NULL, 0);
errstr = sprintrc(rc);
printf("sendto(%d, [", fd);
for (i = 0; i < DEFAULT_STRLEN; ++i) {
if (i)
@ -221,7 +196,7 @@ send_query(const int fd)
", seq=%u, pid=0}}",
msgs[i].nlmsg_len, NLM_F_DUMP, msgs[i].nlmsg_seq);
}
printf(", ...], %u, MSG_DONTWAIT, NULL, 0) = %u\n", msg_len, msg_len);
printf(", ...], %u, MSG_DONTWAIT, NULL, 0) = %s\n", msg_len, errstr);
}
int main(void)