Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
portability for scm_rights using cast and print modifier for msghrd->…
…controllen


The Linux Manpage says:

> According to POSIX.1-2001, the msg_controllen field of the msghdr structure should be typed as socklen_t, but glibc currently types it as size_t.

> `socklen_t`
Describes the length of a socket address.  This is an integer type of at least 32 bits.

So "unsigned int" as defined in Alpine is fine, but break the compilation because of the formatting.

The Debian manpage mentions:

> Most of the integer types described in this page don't have a corresponding length modifier for the printf(3) [...] families of functions. To print a value of an integer type that doesn't have a length modifier, it should be converted to intmax_t or uintmax_t by an explicit cast. [...]
  • Loading branch information
GitMensch authored Sep 15, 2025
commit fd9027a8e0311b71da9365e68062a9b30c4baed8
4 changes: 2 additions & 2 deletions src/test/scm_rights.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ static void child(int sock, int fd_minus_one) {
atomic_printf("c: receiving msg ...\n");
nread = recvmsg(sock, &msg, 0);

atomic_printf("c: ... got %#x (%zd bytes), %zu control bytes\n",
mbuf.ints[0], nread, msg.msg_controllen);
atomic_printf("c: ... got %#x (%zd bytes), %ju control bytes\n",
mbuf.ints[0], nread, (uintmax_t)msg.msg_controllen);
test_assert(nread == sizeof(mbuf.ints[0]));
test_assert(MAGIC == mbuf.ints[0]);
test_assert(~MAGIC == mbuf.ints[1]);
Expand Down