authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-22 22:55:11+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-22 22:55:11+02:00
log891f1687890294ad665dddce202fcdb5a5fe186a
tree8f01b6088427ca4877e53b775ab31165d0948189
parentb9c3d39bd7aa0a4224c71b2a89d5162e36944a35
parentcf7ffbf82d9322890862b164885bd56be9104dfa
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Merge branch 'std-c-audit'


6 files changed, 228 insertions(+), 79 deletions(-)

lib/std/Io.zig+4-1
......@@ -333,7 +333,10 @@ pub const Operation = union(enum) {
333333 else => struct {
334334 file: File,
335335 /// Device-dependent operation code.
336 code: u32,
336 code: switch (builtin.target.os.tag) {
337 .dragonfly, .freebsd, .openbsd => usize,
338 else => u32,
339 },
337340 arg: ?*anyopaque,
338341
339342 /// Device and operation dependent result. Negative values are
lib/std/c.zig+150-70
......@@ -174,6 +174,7 @@ pub const blksize_t = switch (native_os) {
174174 .emscripten => emscripten.blksize_t,
175175 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L42
176176 .serenity => u64,
177 .dragonfly => i64,
177178 else => i32,
178179};
179180
......@@ -217,7 +218,7 @@ pub const passwd = switch (native_os) {
217218};
218219
219220pub const group = switch (native_os) {
220 .linux, .freebsd, .openbsd, .dragonfly, .netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
221 .linux, .freebsd, .openbsd, .dragonfly, .netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => extern struct {
221222 name: ?[*:0]const u8,
222223 passwd: ?[*:0]const u8,
223224 gid: gid_t,
......@@ -318,7 +319,7 @@ pub const clockid_t = switch (native_os) {
318319 THREAD_CPUTIME_ID = 0x20000000,
319320 PROCESS_CPUTIME_ID = 0x40000000,
320321 },
321 .dragonfly => enum(u32) {
322 .dragonfly => enum(c_ulong) {
322323 REALTIME = 0,
323324 VIRTUAL = 1,
324325 PROF = 2,
......@@ -1978,13 +1979,20 @@ pub const RLIM = switch (native_os) {
19781979 .linux => linux.RLIM,
19791980 .emscripten => emscripten.RLIM,
19801981 // https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L52
1981 .openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => struct {
1982 .openbsd, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => struct {
19821983 /// No limit
19831984 pub const INFINITY: rlim_t = (1 << 63) - 1;
19841985
19851986 pub const SAVED_MAX = INFINITY;
19861987 pub const SAVED_CUR = INFINITY;
19871988 },
1989 .haiku => struct {
1990 /// No limit
1991 pub const INFINITY: rlim_t = 0xffffffff;
1992
1993 pub const SAVED_MAX = INFINITY;
1994 pub const SAVED_CUR = INFINITY;
1995 },
19881996 .illumos => struct {
19891997 /// No limit
19901998 pub const INFINITY: rlim_t = (1 << 63) - 3;
......@@ -4085,6 +4093,10 @@ pub const clock_t = switch (native_os) {
40854093pub const cpu_set_t = switch (native_os) {
40864094 .linux => linux.cpu_set_t,
40874095 .emscripten => emscripten.cpu_set_t,
4096 .dragonfly => extern struct {
4097 ary: [4]u64,
4098 },
4099 .freebsd => [1024 / @bitSizeOf(c_ulong)]c_ulong,
40884100 else => void,
40894101};
40904102pub const dl_phdr_info = switch (native_os) {
......@@ -4320,6 +4332,10 @@ const posix_msghdr_const = extern struct {
43204332};
43214333
43224334pub const mmsghdr = switch (native_os) {
4335 .freebsd => extern struct {
4336 hdr: msghdr,
4337 len: isize,
4338 },
43234339 .linux => linux.mmsghdr,
43244340 else => extern struct {
43254341 hdr: msghdr,
......@@ -4470,7 +4486,8 @@ pub const rlim_t = switch (native_os) {
44704486 .linux => linux.rlim_t,
44714487 .emscripten => emscripten.rlim_t,
44724488 .openbsd, .netbsd, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u64,
4473 .haiku, .dragonfly, .freebsd => i64,
4489 .dragonfly, .freebsd => i64,
4490 .haiku => c_ulong,
44744491 // https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L54
44754492 .serenity => usize,
44764493 else => void,
......@@ -4840,12 +4857,15 @@ pub const siginfo_t = switch (native_os) {
48404857 },
48414858 .haiku => extern struct {
48424859 signo: SIG,
4843 code: i32,
4844 errno: i32,
4860 code: c_int,
4861 errno: c_int,
48454862
48464863 pid: pid_t,
48474864 uid: uid_t,
48484865 addr: *allowzero anyopaque,
4866 status: c_int,
4867 band: c_long,
4868 value: sigval,
48494869 },
48504870 .openbsd => extern struct {
48514871 signo: SIG,
......@@ -4854,9 +4874,9 @@ pub const siginfo_t = switch (native_os) {
48544874 data: extern union {
48554875 proc: extern struct {
48564876 pid: pid_t,
4877 uid: uid_t,
48574878 pdata: extern union {
48584879 kill: extern struct {
4859 uid: uid_t,
48604880 value: sigval,
48614881 },
48624882 cld: extern struct {
......@@ -4904,7 +4924,7 @@ pub const sigset_t = switch (native_os) {
49044924pub const sigval = switch (native_os) {
49054925 .linux => linux.sigval,
49064926 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L22-L25
4907 .openbsd, .dragonfly, .freebsd, .serenity => extern union {
4927 .openbsd, .dragonfly, .freebsd, .haiku, .serenity => extern union {
49084928 int: c_int,
49094929 ptr: ?*anyopaque,
49104930 },
......@@ -5205,7 +5225,7 @@ pub const sockaddr = switch (native_os) {
52055225 /// address family
52065226 family: sa_family_t,
52075227 /// actually longer; address value
5208 data: [14]u8,
5228 data: [30]u8,
52095229
52105230 pub const SS_MAXSIZE = 128;
52115231 pub const storage = extern struct {
......@@ -5224,7 +5244,7 @@ pub const sockaddr = switch (native_os) {
52245244 family: sa_family_t = AF.INET,
52255245 port: in_port_t,
52265246 addr: u32,
5227 zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },
5247 zero: [24]u8 = @splat(0),
52285248 };
52295249
52305250 pub const in6 = extern struct {
......@@ -5239,7 +5259,7 @@ pub const sockaddr = switch (native_os) {
52395259 pub const un = extern struct {
52405260 len: u8 = @sizeOf(un),
52415261 family: sa_family_t = AF.UNIX,
5242 path: [104]u8,
5262 path: [126]u8,
52435263 };
52445264 },
52455265 .openbsd => extern struct {
......@@ -5738,7 +5758,7 @@ pub const PF = if (builtin.abi.isAndroid()) struct {
57385758 pub const PIP = AF.pseudo_PIP;
57395759 pub const ISDN = AF.ISDN;
57405760 pub const KEY = AF.pseudo_KEY;
5741 pub const INET6 = AF.pseudo_INET6;
5761 pub const INET6 = AF.INET6;
57425762 pub const NATM = AF.NATM;
57435763 pub const ATM = AF.ATM;
57445764 pub const NETGRAPH = AF.NETGRAPH;
......@@ -7222,7 +7242,7 @@ pub const utsname = switch (native_os) {
72227242 machine: [256:0]u8,
72237243 domainname: [256:0]u8,
72247244 },
7225 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
7245 .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
72267246 sysname: [255:0]u8,
72277247 nodename: [255:0]u8,
72287248 release: [255:0]u8,
......@@ -7337,13 +7357,12 @@ pub const RTLD = switch (native_os) {
73377357 },
73387358 // https://github.com/SerenityOS/serenity/blob/36a26d7fa80bc9c72b19442912d8967f448368ff/Userland/Libraries/LibC/dlfcn.h#L13-L17
73397359 .serenity => packed struct(c_int) {
7340 DEFAULT: bool = false,
7341 _1: u1,
7360 _0: u1,
73427361 LAZY: bool = false,
73437362 NOW: bool = false,
73447363 GLOBAL: bool = false,
73457364 LOCAL: bool = false,
7346 _: @Int(.unsigned, @bitSizeOf(c_int) - 6) = 0,
7365 _: @Int(.unsigned, @bitSizeOf(c_int) - 5) = 0,
73477366 },
73487367 else => void,
73497368};
......@@ -7884,11 +7903,11 @@ pub const Stat = switch (native_os) {
78847903 ctim: timespec,
78857904 size: c_ulong,
78867905 blocks: i64,
7887 blksize: u32,
7906 _old_blksize: u32,
78887907 flags: u32,
78897908 gen: u32,
78907909 lspare: i32,
7891 qspare1: i64,
7910 blksize: blksize_t,
78927911 qspare2: i64,
78937912 pub fn atime(self: @This()) timespec {
78947913 return self.atim;
......@@ -7999,7 +8018,7 @@ pub const Stat = switch (native_os) {
79998018
80008019pub const pthread_spinlock_t = switch (native_os) {
80018020 .openbsd => openbsd.pthread_spinlock_t,
8002 .freebsd => extern struct {
8021 .freebsd, .dragonfly => extern struct {
80038022 inner: ?*anyopaque = null,
80048023 },
80058024 .netbsd => extern struct {
......@@ -8182,7 +8201,7 @@ pub const pthread_rwlock_t = switch (native_os) {
81828201};
81838202
81848203pub const pthread_attr_t = switch (native_os) {
8185 .linux, .emscripten, .dragonfly => extern struct {
8204 .linux, .emscripten => extern struct {
81868205 __size: [56]u8,
81878206 __align: c_long,
81888207 },
......@@ -8191,7 +8210,7 @@ pub const pthread_attr_t = switch (native_os) {
81918210 __opaque: [56]u8,
81928211 },
81938212 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L75
8194 .freebsd, .openbsd, .serenity => extern struct {
8213 .dragonfly, .freebsd, .haiku, .openbsd, .serenity => extern struct {
81958214 inner: ?*anyopaque = null,
81968215 },
81978216 .illumos => extern struct {
......@@ -8202,13 +8221,6 @@ pub const pthread_attr_t = switch (native_os) {
82028221 flags: i32,
82038222 private: ?*anyopaque,
82048223 },
8205 .haiku => extern struct {
8206 detach_state: i32,
8207 sched_priority: i32,
8208 stack_size: i32,
8209 guard_size: i32,
8210 stack_address: ?*anyopaque,
8211 },
82128224 else => void,
82138225};
82148226
......@@ -8216,7 +8228,7 @@ pub const pthread_key_t = switch (native_os) {
82168228 .linux, .emscripten => c_uint,
82178229 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_ulong,
82188230 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L65
8219 .openbsd, .illumos, .serenity => c_int,
8231 .dragonfly, .freebsd, .openbsd, .haiku, .illumos, .serenity => c_int,
82208232 else => void,
82218233};
82228234
......@@ -9033,12 +9045,16 @@ pub const termios = switch (native_os) {
90339045 },
90349046 .haiku => extern struct {
90359047 iflag: tc_iflag_t,
9048 ispeed: u16,
90369049 oflag: tc_oflag_t,
9050 ospeed: u16,
90379051 cflag: tc_cflag_t,
9052 ispeed_high: u16,
90389053 lflag: tc_lflag_t,
9054 ospeed_high: u16,
90399055 line: cc_t,
9040 ispeed: speed_t,
9041 ospeed: speed_t,
9056 _pad1: u8 = 0,
9057 _pad2: u8 = 0,
90429058 cc: [NCCS]cc_t,
90439059 },
90449060 .illumos => extern struct {
......@@ -9115,7 +9131,7 @@ pub const tc_iflag_t = switch (native_os) {
91159131 IMAXBEL: bool = false,
91169132 _: u18 = 0,
91179133 },
9118 .haiku => packed struct(u32) {
9134 .haiku => packed struct(u16) {
91199135 IGNBRK: bool = false,
91209136 BRKINT: bool = false,
91219137 IGNPAR: bool = false,
......@@ -9129,7 +9145,7 @@ pub const tc_iflag_t = switch (native_os) {
91299145 IXON: bool = false,
91309146 IXANY: bool = false,
91319147 IXOFF: bool = false,
9132 _: u19 = 0,
9148 _: u3 = 0,
91339149 },
91349150 .illumos => packed struct(u32) {
91359151 IGNBRK: bool = false,
......@@ -9243,8 +9259,24 @@ pub const tc_oflag_t = switch (native_os) {
92439259 WRAP: bool = false,
92449260 _: u14 = 0,
92459261 },
9262 .haiku => packed struct(u16) {
9263 OPOST: bool = false,
9264 OLCUC: bool = false,
9265 ONLCR: bool = false,
9266 OCRNL: bool = false,
9267 ONOCR: bool = false,
9268 ONLRET: bool = false,
9269 OFILL: bool = false,
9270 OFDEL: bool = false,
9271 NLDLY: u1 = 0,
9272 CRDLY: u2 = 0,
9273 TABDLY: u2 = 0,
9274 BSDLY: u1 = 0,
9275 VTDLY: u1 = 0,
9276 FFDLY: u1 = 0,
9277 },
92469278 // https://github.com/SerenityOS/serenity/blob/d277cdfd4c7ed21d5248a83217ae03b9f890c3c8/Kernel/API/POSIX/termios.h#L69-L97
9247 .haiku, .emscripten, .serenity => packed struct(u32) {
9279 .emscripten, .serenity => packed struct(u32) {
92489280 OPOST: bool = false,
92499281 OLCUC: bool = false,
92509282 ONLCR: bool = false,
......@@ -9357,7 +9389,7 @@ pub const tc_cflag_t = switch (native_os) {
93579389 MDMBUF: bool = false,
93589390 _: u11 = 0,
93599391 },
9360 .haiku => packed struct(u32) {
9392 .haiku => packed struct(u16) {
93619393 _0: u5 = 0,
93629394 CSIZE: CSIZE = .CS7,
93639395 CSTOPB: bool = false,
......@@ -9369,7 +9401,7 @@ pub const tc_cflag_t = switch (native_os) {
93699401 XLOBLK: bool = false,
93709402 CTSFLOW: bool = false,
93719403 RTSFLOW: bool = false,
9372 _: u17 = 0,
9404 _: u1 = 0,
93739405 },
93749406 .illumos => packed struct(u32) {
93759407 _0: u4 = 0,
......@@ -9491,7 +9523,7 @@ pub const tc_lflag_t = switch (native_os) {
94919523 _30: u1 = 0,
94929524 NOFLSH: bool = false,
94939525 },
9494 .haiku => packed struct(u32) {
9526 .haiku => packed struct(u16) {
94959527 ISIG: bool = false,
94969528 ICANON: bool = false,
94979529 XCASE: bool = false,
......@@ -9507,7 +9539,7 @@ pub const tc_lflag_t = switch (native_os) {
95079539 ECHOKE: bool = false,
95089540 FLUSHO: bool = false,
95099541 PENDIN: bool = false,
9510 _: u17 = 0,
9542 _: u1 = 0,
95119543 },
95129544 .illumos => packed struct(u32) {
95139545 ISIG: bool = false,
......@@ -9568,7 +9600,7 @@ pub const tc_lflag_t = switch (native_os) {
95689600
95699601pub const speed_t = switch (native_os) {
95709602 .linux => linux.speed_t,
9571 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .openbsd => enum(u64) {
9603 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .openbsd => enum(if (native_os == .openbsd) c_uint else u64) {
95729604 B0 = 0,
95739605 B50 = 50,
95749606 B75 = 75,
......@@ -9780,7 +9812,7 @@ pub const MINSIGSTKSZ = switch (native_os) {
97809812 },
97819813 .illumos => 2048,
97829814 .haiku, .netbsd => 8192,
9783 .openbsd => 1 << openbsd.MAX_PAGE_SHIFT,
9815 .openbsd => 3 << openbsd.MAX_PAGE_SHIFT,
97849816 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L58
97859817 .serenity => 4096,
97869818 else => {},
......@@ -9790,7 +9822,7 @@ pub const SIGSTKSZ = switch (native_os) {
97909822 .netbsd, .freebsd => MINSIGSTKSZ + 32768,
97919823 .illumos => 8192,
97929824 .haiku => 16384,
9793 .openbsd => MINSIGSTKSZ + (1 << openbsd.MAX_PAGE_SHIFT) * 4,
9825 .openbsd => MINSIGSTKSZ + (1 << openbsd.MAX_PAGE_SHIFT) * (if (openbsd.MAX_PAGE_SHIFT < 14) 4 else 2),
97949826 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L59
97959827 .serenity => 32768,
97969828 else => {},
......@@ -10845,7 +10877,7 @@ pub const malloc_size = switch (native_os) {
1084510877 else => {},
1084610878};
1084710879pub const malloc_usable_size = switch (native_os) {
10848 .freebsd, .linux, .serenity => private.malloc_usable_size,
10880 .freebsd, .linux => private.malloc_usable_size,
1084910881 else => {},
1085010882};
1085110883pub const posix_memalign = switch (native_os) {
......@@ -10906,7 +10938,10 @@ pub extern "c" fn write(fd: fd_t, buf: [*]const u8, nbyte: usize) isize;
1090610938pub extern "c" fn pwrite(fd: fd_t, buf: [*]const u8, nbyte: usize, offset: off_t) isize;
1090710939pub extern "c" fn mmap(addr: ?*align(page_size) anyopaque, len: usize, prot: PROT, flags: MAP, fd: fd_t, offset: off_t) *anyopaque;
1090810940pub extern "c" fn munmap(addr: *align(page_size) const anyopaque, len: usize) c_int;
10909pub extern "c" fn mremap(addr: ?*align(page_size) const anyopaque, old_len: usize, new_len: usize, flags: MREMAP, ...) *anyopaque;
10941pub const mremap = switch (native_os) {
10942 .serenity => serenity.mremap,
10943 else => private.mremap,
10944};
1091010945pub extern "c" fn mprotect(addr: *align(page_size) anyopaque, len: usize, prot: PROT) c_int;
1091110946pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) c_int;
1091210947pub extern "c" fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: c_uint) c_int;
......@@ -10999,7 +11034,10 @@ pub extern "c" fn sendto(
1099911034 addrlen: socklen_t,
1100011035) isize;
1100111036pub extern "c" fn sendmsg(sockfd: fd_t, msg: *const msghdr_const, flags: u32) isize;
11002pub extern "c" fn sendmmsg(sockfd: fd_t, msgvec: [*]mmsghdr, n: c_uint, flags: u32) c_int;
11037pub const sendmmsg = switch (native_os) {
11038 .freebsd => freebsd.sendmmsg,
11039 else => private.sendmmsg,
11040};
1100311041
1100411042pub extern "c" fn recv(
1100511043 sockfd: fd_t,
......@@ -11061,6 +11099,10 @@ pub const pthread_cancelstate = switch (native_os) {
1106111099 ENABLE = 1,
1106211100 DISABLE = 0,
1106311101 },
11102 .dragonfly, .freebsd, .haiku, .openbsd => enum(c_int) {
11103 ENABLE = 0,
11104 DISABLE = 1,
11105 },
1106411106 .linux => if (native_abi.isMusl()) enum(c_int) {
1106511107 ENABLE = 0,
1106611108 DISABLE = 1,
......@@ -11069,6 +11111,10 @@ pub const pthread_cancelstate = switch (native_os) {
1106911111 ENABLE = 0,
1107011112 DISABLE = 1,
1107111113 },
11114 .serenity => enum(c_int) {
11115 ENABLE = 1,
11116 DISABLE = 2,
11117 },
1107211118 else => void,
1107311119};
1107411120pub extern "c" fn pthread_setcancelstate(pthread_cancelstate, ?*pthread_cancelstate) E;
......@@ -11124,7 +11170,7 @@ pub const ptrace = switch (native_os) {
1112411170
1112511171pub extern "c" fn sem_init(sem: *sem_t, pshared: c_int, value: c_uint) c_int;
1112611172pub extern "c" fn sem_destroy(sem: *sem_t) c_int;
11127pub extern "c" fn sem_open(name: [*:0]const u8, flag: c_int, mode: mode_t, value: c_uint) *sem_t;
11173pub extern "c" fn sem_open(name: [*:0]const u8, flag: c_int, ...) *sem_t;
1112811174pub extern "c" fn sem_close(sem: *sem_t) c_int;
1112911175pub extern "c" fn sem_post(sem: *sem_t) c_int;
1113011176pub extern "c" fn sem_wait(sem: *sem_t) c_int;
......@@ -11186,15 +11232,12 @@ pub extern "c" fn getaddrinfo(
1118611232
1118711233pub extern "c" fn freeaddrinfo(res: *addrinfo) void;
1118811234
11189pub extern "c" fn getnameinfo(
11190 noalias addr: *const sockaddr,
11191 addrlen: socklen_t,
11192 noalias host: ?[*]u8,
11193 hostlen: socklen_t,
11194 noalias serv: ?[*]u8,
11195 servlen: socklen_t,
11196 flags: NI,
11197) EAI;
11235pub const getnameinfo = switch (native_os) {
11236 .dragonfly => dragonfly.getnameinfo,
11237 .freebsd => freebsd.getnameinfo,
11238 .openbsd => openbsd.getnameinfo,
11239 else => private.getnameinfo,
11240};
1119811241
1119911242pub extern "c" fn gai_strerror(errcode: EAI) [*:0]const u8;
1120011243
......@@ -11283,21 +11326,44 @@ pub extern "c" fn setsid() pid_t;
1128311326/// These are implementation defined but share identical values in at least musl and glibc:
1128411327/// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n18
1128511328/// - https://sourceware.org/git/?p=glibc.git;a=blob;f=locale/bits/locale.h;h=0fcbb66114be5fef0577dc9047256eb508c45919;hb=c90cfce849d010474e8cccf3e5bff49a2c8b141f#l26
11286pub const LC = enum(c_int) {
11287 CTYPE = 0,
11288 NUMERIC = 1,
11289 TIME = 2,
11290 COLLATE = 3,
11291 MONETARY = 4,
11292 MESSAGES = 5,
11293 ALL = 6,
11294 PAPER = 7,
11295 NAME = 8,
11296 ADDRESS = 9,
11297 TELEPHONE = 10,
11298 MEASUREMENT = 11,
11299 IDENTIFICATION = 12,
11300 _,
11329pub const LC = switch (native_os) {
11330 // https://github.com/SerenityOS/serenity/blob/fe4f3879551f2fdd8a24de06b88f4450e2f3b93d/Userland/Libraries/LibC/locale.h#L14-L29
11331 .serenity => enum(c_int) {
11332 ALL = 0,
11333 COLLATE = 1,
11334 CTYPE = 2,
11335 MONETARY = 3,
11336 NUMERIC = 4,
11337 TIME = 5,
11338 MESSAGES = 6,
11339 _,
11340 },
11341 .serenity => enum(c_int) {
11342 ALL = 0,
11343 NUMERIC = 1,
11344 CTYPE = 2,
11345 COLLATE = 3,
11346 TIME = 4,
11347 MONETARY = 5,
11348 MESSAGES = 6,
11349 _,
11350 },
11351 else => enum(c_int) {
11352 CTYPE = 0,
11353 NUMERIC = 1,
11354 TIME = 2,
11355 COLLATE = 3,
11356 MONETARY = 4,
11357 MESSAGES = 5,
11358 ALL = 6,
11359 PAPER = 7,
11360 NAME = 8,
11361 ADDRESS = 9,
11362 TELEPHONE = 10,
11363 MEASUREMENT = 11,
11364 IDENTIFICATION = 12,
11365 _,
11366 },
1130111367};
1130211368
1130311369pub extern "c" fn setlocale(category: LC, locale: ?[*:0]const u8) ?[*:0]const u8;
......@@ -11364,6 +11430,9 @@ pub const clock_nanosleep = switch (native_os) {
1136411430};
1136511431
1136611432pub const ioctl = switch (native_os) {
11433 .dragonfly => dragonfly.ioctl,
11434 .freebsd => freebsd.ioctl,
11435 .openbsd => openbsd.ioctl,
1136711436 .windows => {},
1136811437 else => private.ioctl,
1136911438};
......@@ -11823,7 +11892,7 @@ const private = struct {
1182311892 extern "c" fn fork() c_int;
1182411893 extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
1182511894 extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;
11826 extern "c" fn getdirentries(fd: fd_t, buf_ptr: [*]u8, nbytes: usize, basep: *i64) isize;
11895 extern "c" fn getdirentries(fd: fd_t, buf_ptr: [*]u8, nbytes: usize, basep: *i64) if (native_os == .dragonfly) c_int else isize;
1182711896 extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) switch (native_os) {
1182811897 else => c_int,
1182911898 .freebsd => isize,
......@@ -11833,13 +11902,24 @@ const private = struct {
1183311902 extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
1183411903 extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;
1183511904 extern "c" fn msync(addr: *align(page_size) const anyopaque, len: usize, flags: c_int) c_int;
11905 extern "c" fn mremap(addr: ?*align(page_size) const anyopaque, old_len: usize, new_len: usize, flags: MREMAP, ...) *anyopaque;
1183611906 extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
1183711907 extern "c" fn pipe2(fds: *[2]fd_t, flags: O) c_int;
1183811908 extern "c" fn readdir(dir: *DIR) ?*dirent;
1183911909 extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
1184011910 extern "c" fn recvmsg(sockfd: fd_t, msg: *msghdr, flags: u32) isize;
1184111911 extern "c" fn sched_yield() c_int;
11912 extern "c" fn getnameinfo(
11913 noalias addr: *const sockaddr,
11914 addrlen: socklen_t,
11915 noalias host: ?[*]u8,
11916 hostlen: socklen_t,
11917 noalias serv: ?[*]u8,
11918 servlen: socklen_t,
11919 flags: NI,
11920 ) EAI;
1184211921 extern "c" fn sendfile(out_fd: fd_t, in_fd: fd_t, offset: ?*off_t, count: usize) isize;
11922 extern "c" fn sendmmsg(sockfd: fd_t, msgvec: [*]mmsghdr, n: c_uint, flags: u32) c_int;
1184311923 extern "c" fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
1184411924 extern "c" fn sigdelset(set: ?*sigset_t, signo: SIG) c_int;
1184511925 extern "c" fn sigaddset(set: ?*sigset_t, signo: SIG) c_int;
lib/std/c/dragonfly.zig+15
......@@ -5,13 +5,28 @@ const caddr_t = std.c.caddr_t;
55const gid_t = std.c.gid_t;
66const iovec = std.c.iovec;
77const pid_t = std.c.pid_t;
8const sockaddr = std.c.sockaddr;
89const socklen_t = std.c.socklen_t;
910const uid_t = std.c.uid_t;
11const fd_t = std.c.fd_t;
12const NI = std.c.NI;
13const EAI = std.c.EAI;
14
15pub extern "c" fn ioctl(fd: fd_t, request: c_ulong, ...) c_int;
1016
1117pub extern "c" fn lwp_gettid() c_int;
1218pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
1319pub extern "c" fn umtx_sleep(ptr: *const volatile c_int, value: c_int, timeout: c_int) c_int;
1420pub extern "c" fn umtx_wakeup(ptr: *const volatile c_int, count: c_int) c_int;
21pub extern "c" fn getnameinfo(
22 noalias addr: *const sockaddr,
23 addrlen: socklen_t,
24 noalias host: ?[*]u8,
25 hostlen: usize,
26 noalias serv: ?[*]u8,
27 servlen: usize,
28 flags: NI,
29) EAI;
1530
1631pub const E = enum(u16) {
1732 /// No error occurred.
lib/std/c/freebsd.zig+18
......@@ -16,16 +16,22 @@ const nlink_t = std.c.nlink_t;
1616const off_t = std.c.off_t;
1717const pid_t = std.c.pid_t;
1818const sockaddr = std.c.sockaddr;
19const socklen_t = std.c.socklen_t;
1920const time_t = std.c.time_t;
2021const timespec = std.c.timespec;
2122const uid_t = std.c.uid_t;
2223const sf_hdtr = std.c.sf_hdtr;
2324const clockid_t = std.c.clockid_t;
25const mmsghdr = std.c.mmsghdr;
26const NI = std.c.NI;
27const EAI = std.c.EAI;
2428
2529comptime {
2630 assert(builtin.os.tag == .freebsd); // Prevent access of std.c symbols on wrong OS.
2731}
2832
33pub extern "c" fn ioctl(fd: fd_t, request: c_ulong, ...) c_int;
34
2935pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
3036
3137pub extern "c" fn kinfo_getfile(pid: pid_t, cntp: *c_int) ?[*]kinfo_file;
......@@ -41,6 +47,18 @@ pub extern "c" fn sendfile(
4147 flags: u32,
4248) c_int;
4349
50pub extern "c" fn sendmmsg(sockfd: fd_t, msgvec: [*]mmsghdr, vlen: usize, flags: u32) isize;
51
52pub extern "c" fn getnameinfo(
53 noalias addr: *const sockaddr,
54 addrlen: socklen_t,
55 noalias host: ?[*]u8,
56 hostlen: usize,
57 noalias serv: ?[*]u8,
58 servlen: usize,
59 flags: NI,
60) EAI;
61
4462pub const UMTX_OP = enum(c_int) {
4563 LOCK = 0,
4664 UNLOCK = 1,
lib/std/c/openbsd.zig+35-8
......@@ -9,11 +9,28 @@ const passwd = std.c.passwd;
99const timespec = std.c.timespec;
1010const uid_t = std.c.uid_t;
1111const pid_t = std.c.pid_t;
12const fd_t = std.c.fd_t;
13const sockaddr = std.c.sockaddr;
14const socklen_t = std.c.socklen_t;
15const NI = std.c.NI;
16const EAI = std.c.EAI;
1217
1318comptime {
1419 assert(builtin.os.tag == .openbsd); // Prevent access of std.c symbols on wrong OS.
1520}
1621
22pub extern "c" fn ioctl(fd: fd_t, request: c_ulong, ...) c_int;
23
24pub extern "c" fn getnameinfo(
25 noalias addr: *const sockaddr,
26 addrlen: socklen_t,
27 noalias host: ?[*]u8,
28 hostlen: usize,
29 noalias serv: ?[*]u8,
30 servlen: usize,
31 flags: NI,
32) EAI;
33
1734pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
1835
1936pub const pthread_spinlock_t = extern struct {
......@@ -268,16 +285,26 @@ pub const E = enum(u16) {
268285 _,
269286};
270287
271pub const MAX_PAGE_SHIFT = switch (builtin.cpu.arch) {
272 .x86 => 12,
273 .sparc64 => 13,
288pub const MAX_PAGE_SHIFT = switch (builtin.target.cpu.arch) {
289 .alpha,
290 .sparc64,
291 => 13,
292 .arm,
293 .aarch64,
294 .hppa,
295 .m88k,
296 .powerpc,
297 .powerpc64,
298 .riscv64,
299 .sh,
300 .x86,
301 .x86_64,
302 => 12,
303 .mips64,
304 => 14,
274305};
275306
276pub const PTHREAD_STACK_MIN = switch (builtin.cpu.arch) {
277 .sparc64 => 1 << 13,
278 .mips64 => 1 << 14,
279 else => 1 << 12,
280};
307pub const PTHREAD_STACK_MIN = 1 << MAX_PAGE_SHIFT;
281308
282309// https://github.com/openbsd/src/blob/718a31b40d39fc6064de6355eb144e74633133fc/sys/netinet/in.h#L283
283310pub const IP = struct {
lib/std/c/serenity.zig+6
......@@ -1,10 +1,12 @@
11const std = @import("../std.zig");
22const assert = std.debug.assert;
33const builtin = @import("builtin");
4const MAP = std.c.MAP;
45const O = std.c.O;
56const clockid_t = std.c.clockid_t;
67const pid_t = std.c.pid_t;
78const timespec = std.c.timespec;
9const page_size = std.heap.page_size_min;
810
911comptime {
1012 assert(builtin.os.tag == .serenity); // Prevent access of std.c symbols on wrong OS.
......@@ -43,6 +45,7 @@ pub const PERF_EVENT = packed struct(c_int) {
4345 SYSCALL: bool = false,
4446 SIGNPOST: bool = false,
4547 FILESYSTEM: bool = false,
48 _: @Int(.unsigned, @bitSizeOf(c_int) - 17) = 0,
4649};
4750
4851// https://github.com/SerenityOS/serenity/blob/abc150085f532f123b598949218893cb272ccc4c/Userland/Libraries/LibC/serenity.h
......@@ -67,6 +70,9 @@ pub extern "c" fn anon_create(size: usize, options: O) c_int;
6770pub extern "c" fn getkeymap(name_buffer: [*]u8, name_buffer_size: usize, map: [*]u32, shift_map: [*]u32, alt_map: [*]u32, altgr_map: [*]u32, shift_altgr_map: [*]u32) c_int;
6871pub extern "c" fn setkeymap(name: [*]const u8, map: [*]const u32, shift_map: [*]const u32, alt_map: [*]const u32, altgr_map: [*]const u32, shift_altgr_map: [*]const u32) c_int;
6972
73// https://github.com/SerenityOS/serenity/blob/fe4f3879551f2fdd8a24de06b88f4450e2f3b93d/Userland/Libraries/LibC/sys/mman.h#L17
74pub extern "c" fn mremap(old_address: ?*align(page_size) anyopaque, old_size: usize, new_size: usize, flags: MAP) *anyopaque;
75
7076// https://github.com/SerenityOS/serenity/blob/5bd8af99be0bc4b2e14f361fd7d7590e6bcfa4d6/Kernel/API/POSIX/netinet/in.h#L29
7177pub const IP = struct {
7278 pub const TOS = 1;