Package: linux-libc-dev Version: 5.17.3-1 Severity: normal Tags: upstream X-Debbugs-Cc: alx.manpa...@gmail.com
I was cleaning up the example programs in the man-pages by using iwyu(1), when I found that <linux/sysctl.h> is using 'size_t' without including any definition for it. See the following example program: $ cat tmp/src/man2/sysctl.2.d/sysctl.c #define _GNU_SOURCE #include <linux/sysctl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/syscall.h> #include <unistd.h> int _sysctl(struct __sysctl_args *args ); #define OSNAMESZ 100 int main(void) { struct __sysctl_args args; char osname[OSNAMESZ]; size_t osnamelth; int name[] = { CTL_KERN, KERN_OSTYPE }; memset(&args, 0, sizeof(args)); args.name = name; args.nlen = sizeof(name)/sizeof(name[0]); args.oldval = osname; args.oldlenp = &osnamelth; osnamelth = sizeof(osname); if (syscall(SYS__sysctl, &args) == -1) { perror("_sysctl"); exit(EXIT_FAILURE); } printf("This machine is running %*s\n", (int) osnamelth, osname); exit(EXIT_SUCCESS); } for which I get the following errors: $ cc -c -std=gnu17 -Wall -Wextra -Werror -Wno-error=unused-parameter \ -Wno-error=sign-compare -Wno-error=format \ -o tmp/src/man2/sysctl.2.d/sysctl.o \ tmp/src/man2/sysctl.2.d/sysctl.c; In file included from tmp/src/man2/sysctl.2.d/sysctl.c:3: /usr/include/linux/sysctl.h:39:9: error: unknown type name 'size_t' 39 | size_t *oldlenp; | ^~~~~~ /usr/include/linux/sysctl.h:41:9: error: unknown type name 'size_t' 41 | size_t newlen; | ^~~~~~ tmp/src/man2/sysctl.2.d/sysctl.c: In function 'main': tmp/src/man2/sysctl.2.d/sysctl.c:26:18: error: assignment to 'int *' from incompatible pointer type 'size_t *' {aka 'long unsigned int *'} [-Werror=incompatible-pointer-types] 26 | args.oldlenp = &osnamelth; | ^ cc1: all warnings being treated as errors It seems that it's supposed to know some types, but for some reason 'size_t' is not defined by the included headers: $ grep include </usr/include/linux/sysctl.h #include <linux/const.h> #include <linux/types.h> Cheers, Alex -- System Information: Debian Release: bookworm/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 5.16.0-5-amd64 (SMP w/4 CPU threads; PREEMPT) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled -- no debconf information