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) {...@@ -333,7 +333,10 @@ pub const Operation = union(enum) {
333 else => struct {333 else => struct {
334 file: File,334 file: File,
335 /// Device-dependent operation code.335 /// Device-dependent operation code.
336 code: u32,336 code: switch (builtin.target.os.tag) {
337 .dragonfly, .freebsd, .openbsd => usize,
338 else => u32,
339 },
337 arg: ?*anyopaque,340 arg: ?*anyopaque,
338341
339 /// Device and operation dependent result. Negative values are342 /// 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) {...@@ -174,6 +174,7 @@ pub const blksize_t = switch (native_os) {
174 .emscripten => emscripten.blksize_t,174 .emscripten => emscripten.blksize_t,
175 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L42175 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L42
176 .serenity => u64,176 .serenity => u64,
177 .dragonfly => i64,
177 else => i32,178 else => i32,
178};179};
179180
...@@ -217,7 +218,7 @@ pub const passwd = switch (native_os) {...@@ -217,7 +218,7 @@ pub const passwd = switch (native_os) {
217};218};
218219
219pub const group = switch (native_os) {220pub 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 {
221 name: ?[*:0]const u8,222 name: ?[*:0]const u8,
222 passwd: ?[*:0]const u8,223 passwd: ?[*:0]const u8,
223 gid: gid_t,224 gid: gid_t,
...@@ -318,7 +319,7 @@ pub const clockid_t = switch (native_os) {...@@ -318,7 +319,7 @@ pub const clockid_t = switch (native_os) {
318 THREAD_CPUTIME_ID = 0x20000000,319 THREAD_CPUTIME_ID = 0x20000000,
319 PROCESS_CPUTIME_ID = 0x40000000,320 PROCESS_CPUTIME_ID = 0x40000000,
320 },321 },
321 .dragonfly => enum(u32) {322 .dragonfly => enum(c_ulong) {
322 REALTIME = 0,323 REALTIME = 0,
323 VIRTUAL = 1,324 VIRTUAL = 1,
324 PROF = 2,325 PROF = 2,
...@@ -1978,13 +1979,20 @@ pub const RLIM = switch (native_os) {...@@ -1978,13 +1979,20 @@ pub const RLIM = switch (native_os) {
1978 .linux => linux.RLIM,1979 .linux => linux.RLIM,
1979 .emscripten => emscripten.RLIM,1980 .emscripten => emscripten.RLIM,
1980 // https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L521981 // 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 {
1982 /// No limit1983 /// No limit
1983 pub const INFINITY: rlim_t = (1 << 63) - 1;1984 pub const INFINITY: rlim_t = (1 << 63) - 1;
19841985
1985 pub const SAVED_MAX = INFINITY;1986 pub const SAVED_MAX = INFINITY;
1986 pub const SAVED_CUR = INFINITY;1987 pub const SAVED_CUR = INFINITY;
1987 },1988 },
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 },
1988 .illumos => struct {1996 .illumos => struct {
1989 /// No limit1997 /// No limit
1990 pub const INFINITY: rlim_t = (1 << 63) - 3;1998 pub const INFINITY: rlim_t = (1 << 63) - 3;
...@@ -4085,6 +4093,10 @@ pub const clock_t = switch (native_os) {...@@ -4085,6 +4093,10 @@ pub const clock_t = switch (native_os) {
4085pub const cpu_set_t = switch (native_os) {4093pub const cpu_set_t = switch (native_os) {
4086 .linux => linux.cpu_set_t,4094 .linux => linux.cpu_set_t,
4087 .emscripten => emscripten.cpu_set_t,4095 .emscripten => emscripten.cpu_set_t,
4096 .dragonfly => extern struct {
4097 ary: [4]u64,
4098 },
4099 .freebsd => [1024 / @bitSizeOf(c_ulong)]c_ulong,
4088 else => void,4100 else => void,
4089};4101};
4090pub const dl_phdr_info = switch (native_os) {4102pub const dl_phdr_info = switch (native_os) {
...@@ -4320,6 +4332,10 @@ const posix_msghdr_const = extern struct {...@@ -4320,6 +4332,10 @@ const posix_msghdr_const = extern struct {
4320};4332};
43214333
4322pub const mmsghdr = switch (native_os) {4334pub const mmsghdr = switch (native_os) {
4335 .freebsd => extern struct {
4336 hdr: msghdr,
4337 len: isize,
4338 },
4323 .linux => linux.mmsghdr,4339 .linux => linux.mmsghdr,
4324 else => extern struct {4340 else => extern struct {
4325 hdr: msghdr,4341 hdr: msghdr,
...@@ -4470,7 +4486,8 @@ pub const rlim_t = switch (native_os) {...@@ -4470,7 +4486,8 @@ pub const rlim_t = switch (native_os) {
4470 .linux => linux.rlim_t,4486 .linux => linux.rlim_t,
4471 .emscripten => emscripten.rlim_t,4487 .emscripten => emscripten.rlim_t,
4472 .openbsd, .netbsd, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u64,4488 .openbsd, .netbsd, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u64,
4473 .haiku, .dragonfly, .freebsd => i64,4489 .dragonfly, .freebsd => i64,
4490 .haiku => c_ulong,
4474 // https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L544491 // https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L54
4475 .serenity => usize,4492 .serenity => usize,
4476 else => void,4493 else => void,
...@@ -4840,12 +4857,15 @@ pub const siginfo_t = switch (native_os) {...@@ -4840,12 +4857,15 @@ pub const siginfo_t = switch (native_os) {
4840 },4857 },
4841 .haiku => extern struct {4858 .haiku => extern struct {
4842 signo: SIG,4859 signo: SIG,
4843 code: i32,4860 code: c_int,
4844 errno: i32,4861 errno: c_int,
48454862
4846 pid: pid_t,4863 pid: pid_t,
4847 uid: uid_t,4864 uid: uid_t,
4848 addr: *allowzero anyopaque,4865 addr: *allowzero anyopaque,
4866 status: c_int,
4867 band: c_long,
4868 value: sigval,
4849 },4869 },
4850 .openbsd => extern struct {4870 .openbsd => extern struct {
4851 signo: SIG,4871 signo: SIG,
...@@ -4854,9 +4874,9 @@ pub const siginfo_t = switch (native_os) {...@@ -4854,9 +4874,9 @@ pub const siginfo_t = switch (native_os) {
4854 data: extern union {4874 data: extern union {
4855 proc: extern struct {4875 proc: extern struct {
4856 pid: pid_t,4876 pid: pid_t,
4877 uid: uid_t,
4857 pdata: extern union {4878 pdata: extern union {
4858 kill: extern struct {4879 kill: extern struct {
4859 uid: uid_t,
4860 value: sigval,4880 value: sigval,
4861 },4881 },
4862 cld: extern struct {4882 cld: extern struct {
...@@ -4904,7 +4924,7 @@ pub const sigset_t = switch (native_os) {...@@ -4904,7 +4924,7 @@ pub const sigset_t = switch (native_os) {
4904pub const sigval = switch (native_os) {4924pub const sigval = switch (native_os) {
4905 .linux => linux.sigval,4925 .linux => linux.sigval,
4906 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L22-L254926 // 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 {
4908 int: c_int,4928 int: c_int,
4909 ptr: ?*anyopaque,4929 ptr: ?*anyopaque,
4910 },4930 },
...@@ -5205,7 +5225,7 @@ pub const sockaddr = switch (native_os) {...@@ -5205,7 +5225,7 @@ pub const sockaddr = switch (native_os) {
5205 /// address family5225 /// address family
5206 family: sa_family_t,5226 family: sa_family_t,
5207 /// actually longer; address value5227 /// actually longer; address value
5208 data: [14]u8,5228 data: [30]u8,
52095229
5210 pub const SS_MAXSIZE = 128;5230 pub const SS_MAXSIZE = 128;
5211 pub const storage = extern struct {5231 pub const storage = extern struct {
...@@ -5224,7 +5244,7 @@ pub const sockaddr = switch (native_os) {...@@ -5224,7 +5244,7 @@ pub const sockaddr = switch (native_os) {
5224 family: sa_family_t = AF.INET,5244 family: sa_family_t = AF.INET,
5225 port: in_port_t,5245 port: in_port_t,
5226 addr: u32,5246 addr: u32,
5227 zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 },5247 zero: [24]u8 = @splat(0),
5228 };5248 };
52295249
5230 pub const in6 = extern struct {5250 pub const in6 = extern struct {
...@@ -5239,7 +5259,7 @@ pub const sockaddr = switch (native_os) {...@@ -5239,7 +5259,7 @@ pub const sockaddr = switch (native_os) {
5239 pub const un = extern struct {5259 pub const un = extern struct {
5240 len: u8 = @sizeOf(un),5260 len: u8 = @sizeOf(un),
5241 family: sa_family_t = AF.UNIX,5261 family: sa_family_t = AF.UNIX,
5242 path: [104]u8,5262 path: [126]u8,
5243 };5263 };
5244 },5264 },
5245 .openbsd => extern struct {5265 .openbsd => extern struct {
...@@ -5738,7 +5758,7 @@ pub const PF = if (builtin.abi.isAndroid()) struct {...@@ -5738,7 +5758,7 @@ pub const PF = if (builtin.abi.isAndroid()) struct {
5738 pub const PIP = AF.pseudo_PIP;5758 pub const PIP = AF.pseudo_PIP;
5739 pub const ISDN = AF.ISDN;5759 pub const ISDN = AF.ISDN;
5740 pub const KEY = AF.pseudo_KEY;5760 pub const KEY = AF.pseudo_KEY;
5741 pub const INET6 = AF.pseudo_INET6;5761 pub const INET6 = AF.INET6;
5742 pub const NATM = AF.NATM;5762 pub const NATM = AF.NATM;
5743 pub const ATM = AF.ATM;5763 pub const ATM = AF.ATM;
5744 pub const NETGRAPH = AF.NETGRAPH;5764 pub const NETGRAPH = AF.NETGRAPH;
...@@ -7222,7 +7242,7 @@ pub const utsname = switch (native_os) {...@@ -7222,7 +7242,7 @@ pub const utsname = switch (native_os) {
7222 machine: [256:0]u8,7242 machine: [256:0]u8,
7223 domainname: [256:0]u8,7243 domainname: [256:0]u8,
7224 },7244 },
7225 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {7245 .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
7226 sysname: [255:0]u8,7246 sysname: [255:0]u8,
7227 nodename: [255:0]u8,7247 nodename: [255:0]u8,
7228 release: [255:0]u8,7248 release: [255:0]u8,
...@@ -7337,13 +7357,12 @@ pub const RTLD = switch (native_os) {...@@ -7337,13 +7357,12 @@ pub const RTLD = switch (native_os) {
7337 },7357 },
7338 // https://github.com/SerenityOS/serenity/blob/36a26d7fa80bc9c72b19442912d8967f448368ff/Userland/Libraries/LibC/dlfcn.h#L13-L177358 // https://github.com/SerenityOS/serenity/blob/36a26d7fa80bc9c72b19442912d8967f448368ff/Userland/Libraries/LibC/dlfcn.h#L13-L17
7339 .serenity => packed struct(c_int) {7359 .serenity => packed struct(c_int) {
7340 DEFAULT: bool = false,7360 _0: u1,
7341 _1: u1,
7342 LAZY: bool = false,7361 LAZY: bool = false,
7343 NOW: bool = false,7362 NOW: bool = false,
7344 GLOBAL: bool = false,7363 GLOBAL: bool = false,
7345 LOCAL: bool = false,7364 LOCAL: bool = false,
7346 _: @Int(.unsigned, @bitSizeOf(c_int) - 6) = 0,7365 _: @Int(.unsigned, @bitSizeOf(c_int) - 5) = 0,
7347 },7366 },
7348 else => void,7367 else => void,
7349};7368};
...@@ -7884,11 +7903,11 @@ pub const Stat = switch (native_os) {...@@ -7884,11 +7903,11 @@ pub const Stat = switch (native_os) {
7884 ctim: timespec,7903 ctim: timespec,
7885 size: c_ulong,7904 size: c_ulong,
7886 blocks: i64,7905 blocks: i64,
7887 blksize: u32,7906 _old_blksize: u32,
7888 flags: u32,7907 flags: u32,
7889 gen: u32,7908 gen: u32,
7890 lspare: i32,7909 lspare: i32,
7891 qspare1: i64,7910 blksize: blksize_t,
7892 qspare2: i64,7911 qspare2: i64,
7893 pub fn atime(self: @This()) timespec {7912 pub fn atime(self: @This()) timespec {
7894 return self.atim;7913 return self.atim;
...@@ -7999,7 +8018,7 @@ pub const Stat = switch (native_os) {...@@ -7999,7 +8018,7 @@ pub const Stat = switch (native_os) {
79998018
8000pub const pthread_spinlock_t = switch (native_os) {8019pub const pthread_spinlock_t = switch (native_os) {
8001 .openbsd => openbsd.pthread_spinlock_t,8020 .openbsd => openbsd.pthread_spinlock_t,
8002 .freebsd => extern struct {8021 .freebsd, .dragonfly => extern struct {
8003 inner: ?*anyopaque = null,8022 inner: ?*anyopaque = null,
8004 },8023 },
8005 .netbsd => extern struct {8024 .netbsd => extern struct {
...@@ -8182,7 +8201,7 @@ pub const pthread_rwlock_t = switch (native_os) {...@@ -8182,7 +8201,7 @@ pub const pthread_rwlock_t = switch (native_os) {
8182};8201};
81838202
8184pub const pthread_attr_t = switch (native_os) {8203pub const pthread_attr_t = switch (native_os) {
8185 .linux, .emscripten, .dragonfly => extern struct {8204 .linux, .emscripten => extern struct {
8186 __size: [56]u8,8205 __size: [56]u8,
8187 __align: c_long,8206 __align: c_long,
8188 },8207 },
...@@ -8191,7 +8210,7 @@ pub const pthread_attr_t = switch (native_os) {...@@ -8191,7 +8210,7 @@ pub const pthread_attr_t = switch (native_os) {
8191 __opaque: [56]u8,8210 __opaque: [56]u8,
8192 },8211 },
8193 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L758212 // 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 {
8195 inner: ?*anyopaque = null,8214 inner: ?*anyopaque = null,
8196 },8215 },
8197 .illumos => extern struct {8216 .illumos => extern struct {
...@@ -8202,13 +8221,6 @@ pub const pthread_attr_t = switch (native_os) {...@@ -8202,13 +8221,6 @@ pub const pthread_attr_t = switch (native_os) {
8202 flags: i32,8221 flags: i32,
8203 private: ?*anyopaque,8222 private: ?*anyopaque,
8204 },8223 },
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 },
8212 else => void,8224 else => void,
8213};8225};
82148226
...@@ -8216,7 +8228,7 @@ pub const pthread_key_t = switch (native_os) {...@@ -8216,7 +8228,7 @@ pub const pthread_key_t = switch (native_os) {
8216 .linux, .emscripten => c_uint,8228 .linux, .emscripten => c_uint,
8217 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_ulong,8229 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_ulong,
8218 // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L658230 // 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,
8220 else => void,8232 else => void,
8221};8233};
82228234
...@@ -9033,12 +9045,16 @@ pub const termios = switch (native_os) {...@@ -9033,12 +9045,16 @@ pub const termios = switch (native_os) {
9033 },9045 },
9034 .haiku => extern struct {9046 .haiku => extern struct {
9035 iflag: tc_iflag_t,9047 iflag: tc_iflag_t,
9048 ispeed: u16,
9036 oflag: tc_oflag_t,9049 oflag: tc_oflag_t,
9050 ospeed: u16,
9037 cflag: tc_cflag_t,9051 cflag: tc_cflag_t,
9052 ispeed_high: u16,
9038 lflag: tc_lflag_t,9053 lflag: tc_lflag_t,
9054 ospeed_high: u16,
9039 line: cc_t,9055 line: cc_t,
9040 ispeed: speed_t,9056 _pad1: u8 = 0,
9041 ospeed: speed_t,9057 _pad2: u8 = 0,
9042 cc: [NCCS]cc_t,9058 cc: [NCCS]cc_t,
9043 },9059 },
9044 .illumos => extern struct {9060 .illumos => extern struct {
...@@ -9115,7 +9131,7 @@ pub const tc_iflag_t = switch (native_os) {...@@ -9115,7 +9131,7 @@ pub const tc_iflag_t = switch (native_os) {
9115 IMAXBEL: bool = false,9131 IMAXBEL: bool = false,
9116 _: u18 = 0,9132 _: u18 = 0,
9117 },9133 },
9118 .haiku => packed struct(u32) {9134 .haiku => packed struct(u16) {
9119 IGNBRK: bool = false,9135 IGNBRK: bool = false,
9120 BRKINT: bool = false,9136 BRKINT: bool = false,
9121 IGNPAR: bool = false,9137 IGNPAR: bool = false,
...@@ -9129,7 +9145,7 @@ pub const tc_iflag_t = switch (native_os) {...@@ -9129,7 +9145,7 @@ pub const tc_iflag_t = switch (native_os) {
9129 IXON: bool = false,9145 IXON: bool = false,
9130 IXANY: bool = false,9146 IXANY: bool = false,
9131 IXOFF: bool = false,9147 IXOFF: bool = false,
9132 _: u19 = 0,9148 _: u3 = 0,
9133 },9149 },
9134 .illumos => packed struct(u32) {9150 .illumos => packed struct(u32) {
9135 IGNBRK: bool = false,9151 IGNBRK: bool = false,
...@@ -9243,8 +9259,24 @@ pub const tc_oflag_t = switch (native_os) {...@@ -9243,8 +9259,24 @@ pub const tc_oflag_t = switch (native_os) {
9243 WRAP: bool = false,9259 WRAP: bool = false,
9244 _: u14 = 0,9260 _: u14 = 0,
9245 },9261 },
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 },
9246 // https://github.com/SerenityOS/serenity/blob/d277cdfd4c7ed21d5248a83217ae03b9f890c3c8/Kernel/API/POSIX/termios.h#L69-L979278 // 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) {
9248 OPOST: bool = false,9280 OPOST: bool = false,
9249 OLCUC: bool = false,9281 OLCUC: bool = false,
9250 ONLCR: bool = false,9282 ONLCR: bool = false,
...@@ -9357,7 +9389,7 @@ pub const tc_cflag_t = switch (native_os) {...@@ -9357,7 +9389,7 @@ pub const tc_cflag_t = switch (native_os) {
9357 MDMBUF: bool = false,9389 MDMBUF: bool = false,
9358 _: u11 = 0,9390 _: u11 = 0,
9359 },9391 },
9360 .haiku => packed struct(u32) {9392 .haiku => packed struct(u16) {
9361 _0: u5 = 0,9393 _0: u5 = 0,
9362 CSIZE: CSIZE = .CS7,9394 CSIZE: CSIZE = .CS7,
9363 CSTOPB: bool = false,9395 CSTOPB: bool = false,
...@@ -9369,7 +9401,7 @@ pub const tc_cflag_t = switch (native_os) {...@@ -9369,7 +9401,7 @@ pub const tc_cflag_t = switch (native_os) {
9369 XLOBLK: bool = false,9401 XLOBLK: bool = false,
9370 CTSFLOW: bool = false,9402 CTSFLOW: bool = false,
9371 RTSFLOW: bool = false,9403 RTSFLOW: bool = false,
9372 _: u17 = 0,9404 _: u1 = 0,
9373 },9405 },
9374 .illumos => packed struct(u32) {9406 .illumos => packed struct(u32) {
9375 _0: u4 = 0,9407 _0: u4 = 0,
...@@ -9491,7 +9523,7 @@ pub const tc_lflag_t = switch (native_os) {...@@ -9491,7 +9523,7 @@ pub const tc_lflag_t = switch (native_os) {
9491 _30: u1 = 0,9523 _30: u1 = 0,
9492 NOFLSH: bool = false,9524 NOFLSH: bool = false,
9493 },9525 },
9494 .haiku => packed struct(u32) {9526 .haiku => packed struct(u16) {
9495 ISIG: bool = false,9527 ISIG: bool = false,
9496 ICANON: bool = false,9528 ICANON: bool = false,
9497 XCASE: bool = false,9529 XCASE: bool = false,
...@@ -9507,7 +9539,7 @@ pub const tc_lflag_t = switch (native_os) {...@@ -9507,7 +9539,7 @@ pub const tc_lflag_t = switch (native_os) {
9507 ECHOKE: bool = false,9539 ECHOKE: bool = false,
9508 FLUSHO: bool = false,9540 FLUSHO: bool = false,
9509 PENDIN: bool = false,9541 PENDIN: bool = false,
9510 _: u17 = 0,9542 _: u1 = 0,
9511 },9543 },
9512 .illumos => packed struct(u32) {9544 .illumos => packed struct(u32) {
9513 ISIG: bool = false,9545 ISIG: bool = false,
...@@ -9568,7 +9600,7 @@ pub const tc_lflag_t = switch (native_os) {...@@ -9568,7 +9600,7 @@ pub const tc_lflag_t = switch (native_os) {
95689600
9569pub const speed_t = switch (native_os) {9601pub const speed_t = switch (native_os) {
9570 .linux => linux.speed_t,9602 .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) {
9572 B0 = 0,9604 B0 = 0,
9573 B50 = 50,9605 B50 = 50,
9574 B75 = 75,9606 B75 = 75,
...@@ -9780,7 +9812,7 @@ pub const MINSIGSTKSZ = switch (native_os) {...@@ -9780,7 +9812,7 @@ pub const MINSIGSTKSZ = switch (native_os) {
9780 },9812 },
9781 .illumos => 2048,9813 .illumos => 2048,
9782 .haiku, .netbsd => 8192,9814 .haiku, .netbsd => 8192,
9783 .openbsd => 1 << openbsd.MAX_PAGE_SHIFT,9815 .openbsd => 3 << openbsd.MAX_PAGE_SHIFT,
9784 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L589816 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L58
9785 .serenity => 4096,9817 .serenity => 4096,
9786 else => {},9818 else => {},
...@@ -9790,7 +9822,7 @@ pub const SIGSTKSZ = switch (native_os) {...@@ -9790,7 +9822,7 @@ pub const SIGSTKSZ = switch (native_os) {
9790 .netbsd, .freebsd => MINSIGSTKSZ + 32768,9822 .netbsd, .freebsd => MINSIGSTKSZ + 32768,
9791 .illumos => 8192,9823 .illumos => 8192,
9792 .haiku => 16384,9824 .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),
9794 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L599826 // https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L59
9795 .serenity => 32768,9827 .serenity => 32768,
9796 else => {},9828 else => {},
...@@ -10845,7 +10877,7 @@ pub const malloc_size = switch (native_os) {...@@ -10845,7 +10877,7 @@ pub const malloc_size = switch (native_os) {
10845 else => {},10877 else => {},
10846};10878};
10847pub const malloc_usable_size = switch (native_os) {10879pub const malloc_usable_size = switch (native_os) {
10848 .freebsd, .linux, .serenity => private.malloc_usable_size,10880 .freebsd, .linux => private.malloc_usable_size,
10849 else => {},10881 else => {},
10850};10882};
10851pub const posix_memalign = switch (native_os) {10883pub const posix_memalign = switch (native_os) {
...@@ -10906,7 +10938,10 @@ pub extern "c" fn write(fd: fd_t, buf: [*]const u8, nbyte: usize) isize;...@@ -10906,7 +10938,10 @@ pub extern "c" fn write(fd: fd_t, buf: [*]const u8, nbyte: usize) isize;
10906pub extern "c" fn pwrite(fd: fd_t, buf: [*]const u8, nbyte: usize, offset: off_t) isize;10938pub extern "c" fn pwrite(fd: fd_t, buf: [*]const u8, nbyte: usize, offset: off_t) isize;
10907pub extern "c" fn mmap(addr: ?*align(page_size) anyopaque, len: usize, prot: PROT, flags: MAP, fd: fd_t, offset: off_t) *anyopaque;10939pub extern "c" fn mmap(addr: ?*align(page_size) anyopaque, len: usize, prot: PROT, flags: MAP, fd: fd_t, offset: off_t) *anyopaque;
10908pub extern "c" fn munmap(addr: *align(page_size) const anyopaque, len: usize) c_int;10940pub 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};
10910pub extern "c" fn mprotect(addr: *align(page_size) anyopaque, len: usize, prot: PROT) c_int;10945pub extern "c" fn mprotect(addr: *align(page_size) anyopaque, len: usize, prot: PROT) c_int;
10911pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) c_int;10946pub extern "c" fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) c_int;
10912pub extern "c" fn linkat(oldfd: fd_t, oldpath: [*:0]const u8, newfd: fd_t, newpath: [*:0]const u8, flags: c_uint) c_int;10947pub 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(...@@ -10999,7 +11034,10 @@ pub extern "c" fn sendto(
10999 addrlen: socklen_t,11034 addrlen: socklen_t,
11000) isize;11035) isize;
11001pub extern "c" fn sendmsg(sockfd: fd_t, msg: *const msghdr_const, flags: u32) isize;11036pub 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
11004pub extern "c" fn recv(11042pub extern "c" fn recv(
11005 sockfd: fd_t,11043 sockfd: fd_t,
...@@ -11061,6 +11099,10 @@ pub const pthread_cancelstate = switch (native_os) {...@@ -11061,6 +11099,10 @@ pub const pthread_cancelstate = switch (native_os) {
11061 ENABLE = 1,11099 ENABLE = 1,
11062 DISABLE = 0,11100 DISABLE = 0,
11063 },11101 },
11102 .dragonfly, .freebsd, .haiku, .openbsd => enum(c_int) {
11103 ENABLE = 0,
11104 DISABLE = 1,
11105 },
11064 .linux => if (native_abi.isMusl()) enum(c_int) {11106 .linux => if (native_abi.isMusl()) enum(c_int) {
11065 ENABLE = 0,11107 ENABLE = 0,
11066 DISABLE = 1,11108 DISABLE = 1,
...@@ -11069,6 +11111,10 @@ pub const pthread_cancelstate = switch (native_os) {...@@ -11069,6 +11111,10 @@ pub const pthread_cancelstate = switch (native_os) {
11069 ENABLE = 0,11111 ENABLE = 0,
11070 DISABLE = 1,11112 DISABLE = 1,
11071 },11113 },
11114 .serenity => enum(c_int) {
11115 ENABLE = 1,
11116 DISABLE = 2,
11117 },
11072 else => void,11118 else => void,
11073};11119};
11074pub extern "c" fn pthread_setcancelstate(pthread_cancelstate, ?*pthread_cancelstate) E;11120pub extern "c" fn pthread_setcancelstate(pthread_cancelstate, ?*pthread_cancelstate) E;
...@@ -11124,7 +11170,7 @@ pub const ptrace = switch (native_os) {...@@ -11124,7 +11170,7 @@ pub const ptrace = switch (native_os) {
1112411170
11125pub extern "c" fn sem_init(sem: *sem_t, pshared: c_int, value: c_uint) c_int;11171pub extern "c" fn sem_init(sem: *sem_t, pshared: c_int, value: c_uint) c_int;
11126pub extern "c" fn sem_destroy(sem: *sem_t) c_int;11172pub 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;
11128pub extern "c" fn sem_close(sem: *sem_t) c_int;11174pub extern "c" fn sem_close(sem: *sem_t) c_int;
11129pub extern "c" fn sem_post(sem: *sem_t) c_int;11175pub extern "c" fn sem_post(sem: *sem_t) c_int;
11130pub extern "c" fn sem_wait(sem: *sem_t) c_int;11176pub extern "c" fn sem_wait(sem: *sem_t) c_int;
...@@ -11186,15 +11232,12 @@ pub extern "c" fn getaddrinfo(...@@ -11186,15 +11232,12 @@ pub extern "c" fn getaddrinfo(
1118611232
11187pub extern "c" fn freeaddrinfo(res: *addrinfo) void;11233pub extern "c" fn freeaddrinfo(res: *addrinfo) void;
1118811234
11189pub extern "c" fn getnameinfo(11235pub const getnameinfo = switch (native_os) {
11190 noalias addr: *const sockaddr,11236 .dragonfly => dragonfly.getnameinfo,
11191 addrlen: socklen_t,11237 .freebsd => freebsd.getnameinfo,
11192 noalias host: ?[*]u8,11238 .openbsd => openbsd.getnameinfo,
11193 hostlen: socklen_t,11239 else => private.getnameinfo,
11194 noalias serv: ?[*]u8,11240};
11195 servlen: socklen_t,
11196 flags: NI,
11197) EAI;
1119811241
11199pub extern "c" fn gai_strerror(errcode: EAI) [*:0]const u8;11242pub extern "c" fn gai_strerror(errcode: EAI) [*:0]const u8;
1120011243
...@@ -11283,21 +11326,44 @@ pub extern "c" fn setsid() pid_t;...@@ -11283,21 +11326,44 @@ pub extern "c" fn setsid() pid_t;
11283/// These are implementation defined but share identical values in at least musl and glibc:11326/// These are implementation defined but share identical values in at least musl and glibc:
11284/// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n1811327/// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n18
11285/// - https://sourceware.org/git/?p=glibc.git;a=blob;f=locale/bits/locale.h;h=0fcbb66114be5fef0577dc9047256eb508c45919;hb=c90cfce849d010474e8cccf3e5bff49a2c8b141f#l2611328/// - 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) {11329pub const LC = switch (native_os) {
11287 CTYPE = 0,11330 // https://github.com/SerenityOS/serenity/blob/fe4f3879551f2fdd8a24de06b88f4450e2f3b93d/Userland/Libraries/LibC/locale.h#L14-L29
11288 NUMERIC = 1,11331 .serenity => enum(c_int) {
11289 TIME = 2,11332 ALL = 0,
11290 COLLATE = 3,11333 COLLATE = 1,
11291 MONETARY = 4,11334 CTYPE = 2,
11292 MESSAGES = 5,11335 MONETARY = 3,
11293 ALL = 6,11336 NUMERIC = 4,
11294 PAPER = 7,11337 TIME = 5,
11295 NAME = 8,11338 MESSAGES = 6,
11296 ADDRESS = 9,11339 _,
11297 TELEPHONE = 10,11340 },
11298 MEASUREMENT = 11,11341 .serenity => enum(c_int) {
11299 IDENTIFICATION = 12,11342 ALL = 0,
11300 _,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 },
11301};11367};
1130211368
11303pub extern "c" fn setlocale(category: LC, locale: ?[*:0]const u8) ?[*:0]const u8;11369pub extern "c" fn setlocale(category: LC, locale: ?[*:0]const u8) ?[*:0]const u8;
...@@ -11364,6 +11430,9 @@ pub const clock_nanosleep = switch (native_os) {...@@ -11364,6 +11430,9 @@ pub const clock_nanosleep = switch (native_os) {
11364};11430};
1136511431
11366pub const ioctl = switch (native_os) {11432pub const ioctl = switch (native_os) {
11433 .dragonfly => dragonfly.ioctl,
11434 .freebsd => freebsd.ioctl,
11435 .openbsd => openbsd.ioctl,
11367 .windows => {},11436 .windows => {},
11368 else => private.ioctl,11437 else => private.ioctl,
11369};11438};
...@@ -11823,7 +11892,7 @@ const private = struct {...@@ -11823,7 +11892,7 @@ const private = struct {
11823 extern "c" fn fork() c_int;11892 extern "c" fn fork() c_int;
11824 extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;11893 extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
11825 extern "c" fn fstatat(dirfd: fd_t, path: [*:0]const u8, buf: *Stat, flag: u32) c_int;11894 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;
11827 extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) switch (native_os) {11896 extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) switch (native_os) {
11828 else => c_int,11897 else => c_int,
11829 .freebsd => isize,11898 .freebsd => isize,
...@@ -11833,13 +11902,24 @@ const private = struct {...@@ -11833,13 +11902,24 @@ const private = struct {
11833 extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;11902 extern "c" fn gettimeofday(noalias tv: ?*timeval, noalias tz: ?*timezone) c_int;
11834 extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;11903 extern "c" fn ioctl(fd: fd_t, request: c_int, ...) c_int;
11835 extern "c" fn msync(addr: *align(page_size) const anyopaque, len: usize, flags: c_int) c_int;11904 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;
11836 extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;11906 extern "c" fn nanosleep(rqtp: *const timespec, rmtp: ?*timespec) c_int;
11837 extern "c" fn pipe2(fds: *[2]fd_t, flags: O) c_int;11907 extern "c" fn pipe2(fds: *[2]fd_t, flags: O) c_int;
11838 extern "c" fn readdir(dir: *DIR) ?*dirent;11908 extern "c" fn readdir(dir: *DIR) ?*dirent;
11839 extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;11909 extern "c" fn realpath(noalias file_name: [*:0]const u8, noalias resolved_name: [*]u8) ?[*:0]u8;
11840 extern "c" fn recvmsg(sockfd: fd_t, msg: *msghdr, flags: u32) isize;11910 extern "c" fn recvmsg(sockfd: fd_t, msg: *msghdr, flags: u32) isize;
11841 extern "c" fn sched_yield() c_int;11911 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;
11842 extern "c" fn sendfile(out_fd: fd_t, in_fd: fd_t, offset: ?*off_t, count: usize) isize;11921 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;
11843 extern "c" fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;11923 extern "c" fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) c_int;
11844 extern "c" fn sigdelset(set: ?*sigset_t, signo: SIG) c_int;11924 extern "c" fn sigdelset(set: ?*sigset_t, signo: SIG) c_int;
11845 extern "c" fn sigaddset(set: ?*sigset_t, signo: SIG) c_int;11925 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;...@@ -5,13 +5,28 @@ const caddr_t = std.c.caddr_t;
5const gid_t = std.c.gid_t;5const gid_t = std.c.gid_t;
6const iovec = std.c.iovec;6const iovec = std.c.iovec;
7const pid_t = std.c.pid_t;7const pid_t = std.c.pid_t;
8const sockaddr = std.c.sockaddr;
8const socklen_t = std.c.socklen_t;9const socklen_t = std.c.socklen_t;
9const uid_t = std.c.uid_t;10const 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
11pub extern "c" fn lwp_gettid() c_int;17pub extern "c" fn lwp_gettid() c_int;
12pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;18pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
13pub extern "c" fn umtx_sleep(ptr: *const volatile c_int, value: c_int, timeout: c_int) c_int;19pub extern "c" fn umtx_sleep(ptr: *const volatile c_int, value: c_int, timeout: c_int) c_int;
14pub extern "c" fn umtx_wakeup(ptr: *const volatile c_int, count: c_int) c_int;20pub 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
16pub const E = enum(u16) {31pub const E = enum(u16) {
17 /// No error occurred.32 /// No error occurred.
lib/std/c/freebsd.zig+18
...@@ -16,16 +16,22 @@ const nlink_t = std.c.nlink_t;...@@ -16,16 +16,22 @@ const nlink_t = std.c.nlink_t;
16const off_t = std.c.off_t;16const off_t = std.c.off_t;
17const pid_t = std.c.pid_t;17const pid_t = std.c.pid_t;
18const sockaddr = std.c.sockaddr;18const sockaddr = std.c.sockaddr;
19const socklen_t = std.c.socklen_t;
19const time_t = std.c.time_t;20const time_t = std.c.time_t;
20const timespec = std.c.timespec;21const timespec = std.c.timespec;
21const uid_t = std.c.uid_t;22const uid_t = std.c.uid_t;
22const sf_hdtr = std.c.sf_hdtr;23const sf_hdtr = std.c.sf_hdtr;
23const clockid_t = std.c.clockid_t;24const clockid_t = std.c.clockid_t;
25const mmsghdr = std.c.mmsghdr;
26const NI = std.c.NI;
27const EAI = std.c.EAI;
2428
25comptime {29comptime {
26 assert(builtin.os.tag == .freebsd); // Prevent access of std.c symbols on wrong OS.30 assert(builtin.os.tag == .freebsd); // Prevent access of std.c symbols on wrong OS.
27}31}
2832
33pub extern "c" fn ioctl(fd: fd_t, request: c_ulong, ...) c_int;
34
29pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;35pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
3036
31pub extern "c" fn kinfo_getfile(pid: pid_t, cntp: *c_int) ?[*]kinfo_file;37pub extern "c" fn kinfo_getfile(pid: pid_t, cntp: *c_int) ?[*]kinfo_file;
...@@ -41,6 +47,18 @@ pub extern "c" fn sendfile(...@@ -41,6 +47,18 @@ pub extern "c" fn sendfile(
41 flags: u32,47 flags: u32,
42) c_int;48) 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
44pub const UMTX_OP = enum(c_int) {62pub const UMTX_OP = enum(c_int) {
45 LOCK = 0,63 LOCK = 0,
46 UNLOCK = 1,64 UNLOCK = 1,
lib/std/c/openbsd.zig+35-8
...@@ -9,11 +9,28 @@ const passwd = std.c.passwd;...@@ -9,11 +9,28 @@ const passwd = std.c.passwd;
9const timespec = std.c.timespec;9const timespec = std.c.timespec;
10const uid_t = std.c.uid_t;10const uid_t = std.c.uid_t;
11const pid_t = std.c.pid_t;11const 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
13comptime {18comptime {
14 assert(builtin.os.tag == .openbsd); // Prevent access of std.c symbols on wrong OS.19 assert(builtin.os.tag == .openbsd); // Prevent access of std.c symbols on wrong OS.
15}20}
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
17pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;34pub extern "c" fn ptrace(request: c_int, pid: pid_t, addr: caddr_t, data: c_int) c_int;
1835
19pub const pthread_spinlock_t = extern struct {36pub const pthread_spinlock_t = extern struct {
...@@ -268,16 +285,26 @@ pub const E = enum(u16) {...@@ -268,16 +285,26 @@ pub const E = enum(u16) {
268 _,285 _,
269};286};
270287
271pub const MAX_PAGE_SHIFT = switch (builtin.cpu.arch) {288pub const MAX_PAGE_SHIFT = switch (builtin.target.cpu.arch) {
272 .x86 => 12,289 .alpha,
273 .sparc64 => 13,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,
274};305};
275306
276pub const PTHREAD_STACK_MIN = switch (builtin.cpu.arch) {307pub const PTHREAD_STACK_MIN = 1 << MAX_PAGE_SHIFT;
277 .sparc64 => 1 << 13,
278 .mips64 => 1 << 14,
279 else => 1 << 12,
280};
281308
282// https://github.com/openbsd/src/blob/718a31b40d39fc6064de6355eb144e74633133fc/sys/netinet/in.h#L283309// https://github.com/openbsd/src/blob/718a31b40d39fc6064de6355eb144e74633133fc/sys/netinet/in.h#L283
283pub const IP = struct {310pub const IP = struct {
lib/std/c/serenity.zig+6
...@@ -1,10 +1,12 @@...@@ -1,10 +1,12 @@
1const std = @import("../std.zig");1const std = @import("../std.zig");
2const assert = std.debug.assert;2const assert = std.debug.assert;
3const builtin = @import("builtin");3const builtin = @import("builtin");
4const MAP = std.c.MAP;
4const O = std.c.O;5const O = std.c.O;
5const clockid_t = std.c.clockid_t;6const clockid_t = std.c.clockid_t;
6const pid_t = std.c.pid_t;7const pid_t = std.c.pid_t;
7const timespec = std.c.timespec;8const timespec = std.c.timespec;
9const page_size = std.heap.page_size_min;
810
9comptime {11comptime {
10 assert(builtin.os.tag == .serenity); // Prevent access of std.c symbols on wrong OS.12 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) {...@@ -43,6 +45,7 @@ pub const PERF_EVENT = packed struct(c_int) {
43 SYSCALL: bool = false,45 SYSCALL: bool = false,
44 SIGNPOST: bool = false,46 SIGNPOST: bool = false,
45 FILESYSTEM: bool = false,47 FILESYSTEM: bool = false,
48 _: @Int(.unsigned, @bitSizeOf(c_int) - 17) = 0,
46};49};
4750
48// https://github.com/SerenityOS/serenity/blob/abc150085f532f123b598949218893cb272ccc4c/Userland/Libraries/LibC/serenity.h51// 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;...@@ -67,6 +70,9 @@ pub extern "c" fn anon_create(size: usize, options: O) c_int;
67pub 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;70pub 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;
68pub 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;71pub 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
70// https://github.com/SerenityOS/serenity/blob/5bd8af99be0bc4b2e14f361fd7d7590e6bcfa4d6/Kernel/API/POSIX/netinet/in.h#L2976// https://github.com/SerenityOS/serenity/blob/5bd8af99be0bc4b2e14f361fd7d7590e6bcfa4d6/Kernel/API/POSIX/netinet/in.h#L29
71pub const IP = struct {77pub const IP = struct {
72 pub const TOS = 1;78 pub const TOS = 1;