master
1const std = @import("std");
2const builtin = @import("builtin");
3const wasi = std.os.wasi;
4const linux = std.os.linux;
5const iovec = std.posix.iovec;
6const iovec_const = std.posix.iovec_const;
7const c = std.c;
8
9// TODO: go through this file and delete all the bits that are identical to linux because they can
10// be merged in the std.c namespace.
11
12pub const FILE = c.FILE;
13
14var __stack_chk_guard: usize = 0;
15fn __stack_chk_fail() callconv(.c) void {
16 std.debug.print("stack smashing detected: terminated\n", .{});
17 emscripten_force_exit(127);
18}
19
20comptime {
21 if (builtin.os.tag == .emscripten) {
22 if (builtin.mode == .Debug or builtin.mode == .ReleaseSafe) {
23 // Emscripten does not provide these symbols, so we must export our own
24 @export(&__stack_chk_guard, .{ .name = "__stack_chk_guard", .linkage = .strong });
25 @export(&__stack_chk_fail, .{ .name = "__stack_chk_fail", .linkage = .strong });
26 }
27 }
28}
29
30pub const PF = linux.PF;
31pub const AF = linux.AF;
32pub const CLOCK = linux.CLOCK;
33
34pub const CPU_SETSIZE = 128;
35pub const cpu_set_t = [CPU_SETSIZE / @sizeOf(usize)]usize;
36pub const cpu_count_t = std.meta.Int(.unsigned, std.math.log2(CPU_SETSIZE * 8));
37
38pub fn CPU_COUNT(set: cpu_set_t) cpu_count_t {
39 var sum: cpu_count_t = 0;
40 for (set) |x| {
41 sum += @popCount(x);
42 }
43 return sum;
44}
45
46pub const E = enum(u16) {
47 SUCCESS = @intFromEnum(wasi.errno_t.SUCCESS),
48 @"2BIG" = @intFromEnum(wasi.errno_t.@"2BIG"),
49 ACCES = @intFromEnum(wasi.errno_t.ACCES),
50 ADDRINUSE = @intFromEnum(wasi.errno_t.ADDRINUSE),
51 ADDRNOTAVAIL = @intFromEnum(wasi.errno_t.ADDRNOTAVAIL),
52 AFNOSUPPORT = @intFromEnum(wasi.errno_t.AFNOSUPPORT),
53 /// This is also the error code used for `WOULDBLOCK`.
54 AGAIN = @intFromEnum(wasi.errno_t.AGAIN),
55 ALREADY = @intFromEnum(wasi.errno_t.ALREADY),
56 BADF = @intFromEnum(wasi.errno_t.BADF),
57 BADMSG = @intFromEnum(wasi.errno_t.BADMSG),
58 BUSY = @intFromEnum(wasi.errno_t.BUSY),
59 CANCELED = @intFromEnum(wasi.errno_t.CANCELED),
60 CHILD = @intFromEnum(wasi.errno_t.CHILD),
61 CONNABORTED = @intFromEnum(wasi.errno_t.CONNABORTED),
62 CONNREFUSED = @intFromEnum(wasi.errno_t.CONNREFUSED),
63 CONNRESET = @intFromEnum(wasi.errno_t.CONNRESET),
64 DEADLK = @intFromEnum(wasi.errno_t.DEADLK),
65 DESTADDRREQ = @intFromEnum(wasi.errno_t.DESTADDRREQ),
66 DOM = @intFromEnum(wasi.errno_t.DOM),
67 DQUOT = @intFromEnum(wasi.errno_t.DQUOT),
68 EXIST = @intFromEnum(wasi.errno_t.EXIST),
69 FAULT = @intFromEnum(wasi.errno_t.FAULT),
70 FBIG = @intFromEnum(wasi.errno_t.FBIG),
71 HOSTUNREACH = @intFromEnum(wasi.errno_t.HOSTUNREACH),
72 IDRM = @intFromEnum(wasi.errno_t.IDRM),
73 ILSEQ = @intFromEnum(wasi.errno_t.ILSEQ),
74 INPROGRESS = @intFromEnum(wasi.errno_t.INPROGRESS),
75 INTR = @intFromEnum(wasi.errno_t.INTR),
76 INVAL = @intFromEnum(wasi.errno_t.INVAL),
77 IO = @intFromEnum(wasi.errno_t.IO),
78 ISCONN = @intFromEnum(wasi.errno_t.ISCONN),
79 ISDIR = @intFromEnum(wasi.errno_t.ISDIR),
80 LOOP = @intFromEnum(wasi.errno_t.LOOP),
81 MFILE = @intFromEnum(wasi.errno_t.MFILE),
82 MLINK = @intFromEnum(wasi.errno_t.MLINK),
83 MSGSIZE = @intFromEnum(wasi.errno_t.MSGSIZE),
84 MULTIHOP = @intFromEnum(wasi.errno_t.MULTIHOP),
85 NAMETOOLONG = @intFromEnum(wasi.errno_t.NAMETOOLONG),
86 NETDOWN = @intFromEnum(wasi.errno_t.NETDOWN),
87 NETRESET = @intFromEnum(wasi.errno_t.NETRESET),
88 NETUNREACH = @intFromEnum(wasi.errno_t.NETUNREACH),
89 NFILE = @intFromEnum(wasi.errno_t.NFILE),
90 NOBUFS = @intFromEnum(wasi.errno_t.NOBUFS),
91 NODEV = @intFromEnum(wasi.errno_t.NODEV),
92 NOENT = @intFromEnum(wasi.errno_t.NOENT),
93 NOEXEC = @intFromEnum(wasi.errno_t.NOEXEC),
94 NOLCK = @intFromEnum(wasi.errno_t.NOLCK),
95 NOLINK = @intFromEnum(wasi.errno_t.NOLINK),
96 NOMEM = @intFromEnum(wasi.errno_t.NOMEM),
97 NOMSG = @intFromEnum(wasi.errno_t.NOMSG),
98 NOPROTOOPT = @intFromEnum(wasi.errno_t.NOPROTOOPT),
99 NOSPC = @intFromEnum(wasi.errno_t.NOSPC),
100 NOSYS = @intFromEnum(wasi.errno_t.NOSYS),
101 NOTCONN = @intFromEnum(wasi.errno_t.NOTCONN),
102 NOTDIR = @intFromEnum(wasi.errno_t.NOTDIR),
103 NOTEMPTY = @intFromEnum(wasi.errno_t.NOTEMPTY),
104 NOTRECOVERABLE = @intFromEnum(wasi.errno_t.NOTRECOVERABLE),
105 NOTSOCK = @intFromEnum(wasi.errno_t.NOTSOCK),
106 /// This is also the code used for `NOTSUP`.
107 OPNOTSUPP = @intFromEnum(wasi.errno_t.OPNOTSUPP),
108 NOTTY = @intFromEnum(wasi.errno_t.NOTTY),
109 NXIO = @intFromEnum(wasi.errno_t.NXIO),
110 OVERFLOW = @intFromEnum(wasi.errno_t.OVERFLOW),
111 OWNERDEAD = @intFromEnum(wasi.errno_t.OWNERDEAD),
112 PERM = @intFromEnum(wasi.errno_t.PERM),
113 PIPE = @intFromEnum(wasi.errno_t.PIPE),
114 PROTO = @intFromEnum(wasi.errno_t.PROTO),
115 PROTONOSUPPORT = @intFromEnum(wasi.errno_t.PROTONOSUPPORT),
116 PROTOTYPE = @intFromEnum(wasi.errno_t.PROTOTYPE),
117 RANGE = @intFromEnum(wasi.errno_t.RANGE),
118 ROFS = @intFromEnum(wasi.errno_t.ROFS),
119 SPIPE = @intFromEnum(wasi.errno_t.SPIPE),
120 SRCH = @intFromEnum(wasi.errno_t.SRCH),
121 STALE = @intFromEnum(wasi.errno_t.STALE),
122 TIMEDOUT = @intFromEnum(wasi.errno_t.TIMEDOUT),
123 TXTBSY = @intFromEnum(wasi.errno_t.TXTBSY),
124 XDEV = @intFromEnum(wasi.errno_t.XDEV),
125 NOTCAPABLE = @intFromEnum(wasi.errno_t.NOTCAPABLE),
126
127 ENOSTR = 100,
128 EBFONT = 101,
129 EBADSLT = 102,
130 EBADRQC = 103,
131 ENOANO = 104,
132 ENOTBLK = 105,
133 ECHRNG = 106,
134 EL3HLT = 107,
135 EL3RST = 108,
136 ELNRNG = 109,
137 EUNATCH = 110,
138 ENOCSI = 111,
139 EL2HLT = 112,
140 EBADE = 113,
141 EBADR = 114,
142 EXFULL = 115,
143 ENODATA = 116,
144 ETIME = 117,
145 ENOSR = 118,
146 ENONET = 119,
147 ENOPKG = 120,
148 EREMOTE = 121,
149 EADV = 122,
150 ESRMNT = 123,
151 ECOMM = 124,
152 EDOTDOT = 125,
153 ENOTUNIQ = 126,
154 EBADFD = 127,
155 EREMCHG = 128,
156 ELIBACC = 129,
157 ELIBBAD = 130,
158 ELIBSCN = 131,
159 ELIBMAX = 132,
160 ELIBEXEC = 133,
161 ERESTART = 134,
162 ESTRPIPE = 135,
163 EUSERS = 136,
164 ESOCKTNOSUPPORT = 137,
165 EOPNOTSUPP = 138,
166 EPFNOSUPPORT = 139,
167 ESHUTDOWN = 140,
168 ETOOMANYREFS = 141,
169 EHOSTDOWN = 142,
170 EUCLEAN = 143,
171 ENOTNAM = 144,
172 ENAVAIL = 145,
173 EISNAM = 146,
174 EREMOTEIO = 147,
175 ENOMEDIUM = 148,
176 EMEDIUMTYPE = 149,
177 ENOKEY = 150,
178 EKEYEXPIRED = 151,
179 EKEYREVOKED = 152,
180 EKEYREJECTED = 153,
181 ERFKILL = 154,
182 EHWPOISON = 155,
183 EL2NSYNC = 156,
184 _,
185};
186
187pub const F = struct {
188 pub const DUPFD = 0;
189 pub const GETFD = 1;
190 pub const SETFD = 2;
191 pub const GETFL = 3;
192 pub const SETFL = 4;
193 pub const SETOWN = 8;
194 pub const GETOWN = 9;
195 pub const SETSIG = 10;
196 pub const GETSIG = 11;
197 pub const GETLK = 12;
198 pub const SETLK = 13;
199 pub const SETLKW = 14;
200 pub const SETOWN_EX = 15;
201 pub const GETOWN_EX = 16;
202 pub const GETOWNER_UIDS = 17;
203
204 pub const RDLCK = 0;
205 pub const WRLCK = 1;
206 pub const UNLCK = 2;
207};
208
209pub const FD_CLOEXEC = 1;
210
211pub const F_OK = 0;
212pub const X_OK = 1;
213pub const W_OK = 2;
214pub const R_OK = 4;
215
216pub const W = struct {
217 pub const NOHANG = 1;
218 pub const UNTRACED = 2;
219 pub const STOPPED = 2;
220 pub const EXITED = 4;
221 pub const CONTINUED = 8;
222 pub const NOWAIT = 0x1000000;
223
224 pub fn EXITSTATUS(s: u32) u8 {
225 return @as(u8, @intCast((s & 0xff00) >> 8));
226 }
227 pub fn TERMSIG(s: u32) u32 {
228 return s & 0x7f;
229 }
230 pub fn STOPSIG(s: u32) u32 {
231 return EXITSTATUS(s);
232 }
233 pub fn IFEXITED(s: u32) bool {
234 return TERMSIG(s) == 0;
235 }
236 pub fn IFSTOPPED(s: u32) bool {
237 return @as(u16, @truncate(((s & 0xffff) *% 0x10001) >> 8)) > 0x7f00;
238 }
239 pub fn IFSIGNALED(s: u32) bool {
240 return (s & 0xffff) -% 1 < 0xff;
241 }
242};
243
244pub const Flock = extern struct {
245 type: i16,
246 whence: i16,
247 start: off_t,
248 len: off_t,
249 pid: pid_t,
250};
251
252pub const IFNAMESIZE = 16;
253
254pub const NAME_MAX = 255;
255pub const PATH_MAX = 4096;
256pub const IOV_MAX = 1024;
257
258pub const IPPORT_RESERVED = 1024;
259
260pub const IPPROTO = linux.IPPROTO;
261
262pub const LOCK = struct {
263 pub const SH = 1;
264 pub const EX = 2;
265 pub const NB = 4;
266 pub const UN = 8;
267};
268
269pub const MADV = struct {
270 pub const NORMAL = 0;
271 pub const RANDOM = 1;
272 pub const SEQUENTIAL = 2;
273 pub const WILLNEED = 3;
274 pub const DONTNEED = 4;
275 pub const FREE = 8;
276 pub const REMOVE = 9;
277 pub const DONTFORK = 10;
278 pub const DOFORK = 11;
279 pub const MERGEABLE = 12;
280 pub const UNMERGEABLE = 13;
281 pub const HUGEPAGE = 14;
282 pub const NOHUGEPAGE = 15;
283 pub const DONTDUMP = 16;
284 pub const DODUMP = 17;
285 pub const WIPEONFORK = 18;
286 pub const KEEPONFORK = 19;
287 pub const COLD = 20;
288 pub const PAGEOUT = 21;
289 pub const HWPOISON = 100;
290 pub const SOFT_OFFLINE = 101;
291};
292
293pub const MSF = struct {
294 pub const ASYNC = 1;
295 pub const INVALIDATE = 2;
296 pub const SYNC = 4;
297};
298
299pub const MSG = struct {
300 pub const OOB = 0x0001;
301 pub const PEEK = 0x0002;
302 pub const DONTROUTE = 0x0004;
303 pub const CTRUNC = 0x0008;
304 pub const PROXY = 0x0010;
305 pub const TRUNC = 0x0020;
306 pub const DONTWAIT = 0x0040;
307 pub const EOR = 0x0080;
308 pub const WAITALL = 0x0100;
309 pub const FIN = 0x0200;
310 pub const SYN = 0x0400;
311 pub const CONFIRM = 0x0800;
312 pub const RST = 0x1000;
313 pub const ERRQUEUE = 0x2000;
314 pub const NOSIGNAL = 0x4000;
315 pub const MORE = 0x8000;
316 pub const WAITFORONE = 0x10000;
317 pub const BATCH = 0x40000;
318 pub const ZEROCOPY = 0x4000000;
319 pub const FASTOPEN = 0x20000000;
320 pub const CMSG_CLOEXEC = 0x40000000;
321};
322
323pub const POLL = struct {
324 pub const IN = 0x001;
325 pub const PRI = 0x002;
326 pub const OUT = 0x004;
327 pub const ERR = 0x008;
328 pub const HUP = 0x010;
329 pub const NVAL = 0x020;
330 pub const RDNORM = 0x040;
331 pub const RDBAND = 0x080;
332};
333
334pub const PROT = struct {
335 pub const NONE = 0x0;
336 pub const READ = 0x1;
337 pub const WRITE = 0x2;
338 pub const EXEC = 0x4;
339 pub const GROWSDOWN = 0x01000000;
340 pub const GROWSUP = 0x02000000;
341};
342
343pub const rlim_t = u64;
344
345pub const RLIM = struct {
346 pub const INFINITY = ~@as(rlim_t, 0);
347
348 pub const SAVED_MAX = INFINITY;
349 pub const SAVED_CUR = INFINITY;
350};
351
352pub const rlimit = c.rlimit;
353
354pub const rlimit_resource = enum(c_int) {
355 CPU,
356 FSIZE,
357 DATA,
358 STACK,
359 CORE,
360 RSS,
361 NPROC,
362 NOFILE,
363 MEMLOCK,
364 AS,
365 LOCKS,
366 SIGPENDING,
367 MSGQUEUE,
368 NICE,
369 RTPRIO,
370 RTTIME,
371 _,
372};
373
374pub const rusage = extern struct {
375 utime: timeval,
376 stime: timeval,
377 maxrss: isize,
378 ixrss: isize,
379 idrss: isize,
380 isrss: isize,
381 minflt: isize,
382 majflt: isize,
383 nswap: isize,
384 inblock: isize,
385 oublock: isize,
386 msgsnd: isize,
387 msgrcv: isize,
388 nsignals: isize,
389 nvcsw: isize,
390 nivcsw: isize,
391 __reserved: [16]isize = [1]isize{0} ** 16,
392
393 pub const SELF = 0;
394 pub const CHILDREN = -1;
395 pub const THREAD = 1;
396};
397
398pub const timeval = extern struct {
399 sec: i64,
400 usec: i32,
401};
402
403pub const S = struct {
404 pub const IFMT = 0o170000;
405
406 pub const IFDIR = 0o040000;
407 pub const IFCHR = 0o020000;
408 pub const IFBLK = 0o060000;
409 pub const IFREG = 0o100000;
410 pub const IFIFO = 0o010000;
411 pub const IFLNK = 0o120000;
412 pub const IFSOCK = 0o140000;
413
414 pub const ISUID = 0o4000;
415 pub const ISGID = 0o2000;
416 pub const ISVTX = 0o1000;
417 pub const IRUSR = 0o400;
418 pub const IWUSR = 0o200;
419 pub const IXUSR = 0o100;
420 pub const IRWXU = 0o700;
421 pub const IRGRP = 0o040;
422 pub const IWGRP = 0o020;
423 pub const IXGRP = 0o010;
424 pub const IRWXG = 0o070;
425 pub const IROTH = 0o004;
426 pub const IWOTH = 0o002;
427 pub const IXOTH = 0o001;
428 pub const IRWXO = 0o007;
429
430 pub fn ISREG(m: mode_t) bool {
431 return m & IFMT == IFREG;
432 }
433
434 pub fn ISDIR(m: mode_t) bool {
435 return m & IFMT == IFDIR;
436 }
437
438 pub fn ISCHR(m: mode_t) bool {
439 return m & IFMT == IFCHR;
440 }
441
442 pub fn ISBLK(m: mode_t) bool {
443 return m & IFMT == IFBLK;
444 }
445
446 pub fn ISFIFO(m: mode_t) bool {
447 return m & IFMT == IFIFO;
448 }
449
450 pub fn ISLNK(m: mode_t) bool {
451 return m & IFMT == IFLNK;
452 }
453
454 pub fn ISSOCK(m: mode_t) bool {
455 return m & IFMT == IFSOCK;
456 }
457};
458
459pub const SA = struct {
460 pub const NOCLDSTOP = 1;
461 pub const NOCLDWAIT = 2;
462 pub const SIGINFO = 4;
463 pub const RESTART = 0x10000000;
464 pub const RESETHAND = 0x80000000;
465 pub const ONSTACK = 0x08000000;
466 pub const NODEFER = 0x40000000;
467 pub const RESTORER = 0x04000000;
468};
469
470pub const SEEK = struct {
471 pub const SET = 0;
472 pub const CUR = 1;
473 pub const END = 2;
474};
475
476pub const SHUT = struct {
477 pub const RD = 0;
478 pub const WR = 1;
479 pub const RDWR = 2;
480};
481
482pub const SIG = linux.SIG;
483
484pub const Sigaction = extern struct {
485 pub const handler_fn = *align(1) const fn (i32) callconv(.c) void;
486 pub const sigaction_fn = *const fn (i32, *const siginfo_t, ?*anyopaque) callconv(.c) void;
487
488 handler: extern union {
489 handler: ?handler_fn,
490 sigaction: ?sigaction_fn,
491 },
492 mask: sigset_t,
493 flags: c_uint,
494 restorer: ?*const fn () callconv(.c) void = null,
495};
496
497pub const sigset_t = [1024 / 32]u32;
498pub fn sigemptyset() sigset_t {
499 return [_]u32{0} ** @typeInfo(sigset_t).array.len;
500}
501pub const siginfo_t = extern struct {
502 signo: i32,
503 errno: i32,
504 code: i32,
505 fields: siginfo_fields_union,
506};
507const siginfo_fields_union = extern union {
508 pad: [128 - 2 * @sizeOf(c_int) - @sizeOf(c_long)]u8,
509 common: extern struct {
510 first: extern union {
511 piduid: extern struct {
512 pid: pid_t,
513 uid: uid_t,
514 },
515 timer: extern struct {
516 timerid: i32,
517 overrun: i32,
518 },
519 },
520 second: extern union {
521 value: sigval,
522 sigchld: extern struct {
523 status: i32,
524 utime: clock_t,
525 stime: clock_t,
526 },
527 },
528 },
529 sigfault: extern struct {
530 addr: *allowzero anyopaque,
531 addr_lsb: i16,
532 first: extern union {
533 addr_bnd: extern struct {
534 lower: *anyopaque,
535 upper: *anyopaque,
536 },
537 pkey: u32,
538 },
539 },
540 sigpoll: extern struct {
541 band: isize,
542 fd: i32,
543 },
544 sigsys: extern struct {
545 call_addr: *anyopaque,
546 syscall: i32,
547 native_arch: u32,
548 },
549};
550pub const sigval = extern union {
551 int: i32,
552 ptr: *anyopaque,
553};
554
555pub const SIOCGIFINDEX = 0x8933;
556
557pub const SO = struct {
558 pub const DEBUG = 1;
559 pub const REUSEADDR = 2;
560 pub const TYPE = 3;
561 pub const ERROR = 4;
562 pub const DONTROUTE = 5;
563 pub const BROADCAST = 6;
564 pub const SNDBUF = 7;
565 pub const RCVBUF = 8;
566 pub const KEEPALIVE = 9;
567 pub const OOBINLINE = 10;
568 pub const NO_CHECK = 11;
569 pub const PRIORITY = 12;
570 pub const LINGER = 13;
571 pub const BSDCOMPAT = 14;
572 pub const REUSEPORT = 15;
573 pub const PASSCRED = 16;
574 pub const PEERCRED = 17;
575 pub const RCVLOWAT = 18;
576 pub const SNDLOWAT = 19;
577 pub const RCVTIMEO = 20;
578 pub const SNDTIMEO = 21;
579 pub const ACCEPTCONN = 30;
580 pub const PEERSEC = 31;
581 pub const SNDBUFFORCE = 32;
582 pub const RCVBUFFORCE = 33;
583 pub const PROTOCOL = 38;
584 pub const DOMAIN = 39;
585 pub const SECURITY_AUTHENTICATION = 22;
586 pub const SECURITY_ENCRYPTION_TRANSPORT = 23;
587 pub const SECURITY_ENCRYPTION_NETWORK = 24;
588 pub const BINDTODEVICE = 25;
589 pub const ATTACH_FILTER = 26;
590 pub const DETACH_FILTER = 27;
591 pub const GET_FILTER = ATTACH_FILTER;
592 pub const PEERNAME = 28;
593 pub const TIMESTAMP_OLD = 29;
594 pub const PASSSEC = 34;
595 pub const TIMESTAMPNS_OLD = 35;
596 pub const MARK = 36;
597 pub const TIMESTAMPING_OLD = 37;
598 pub const RXQ_OVFL = 40;
599 pub const WIFI_STATUS = 41;
600 pub const PEEK_OFF = 42;
601 pub const NOFCS = 43;
602 pub const LOCK_FILTER = 44;
603 pub const SELECT_ERR_QUEUE = 45;
604 pub const BUSY_POLL = 46;
605 pub const MAX_PACING_RATE = 47;
606 pub const BPF_EXTENSIONS = 48;
607 pub const INCOMING_CPU = 49;
608 pub const ATTACH_BPF = 50;
609 pub const DETACH_BPF = DETACH_FILTER;
610 pub const ATTACH_REUSEPORT_CBPF = 51;
611 pub const ATTACH_REUSEPORT_EBPF = 52;
612 pub const CNX_ADVICE = 53;
613 pub const MEMINFO = 55;
614 pub const INCOMING_NAPI_ID = 56;
615 pub const COOKIE = 57;
616 pub const PEERGROUPS = 59;
617 pub const ZEROCOPY = 60;
618 pub const TXTIME = 61;
619 pub const BINDTOIFINDEX = 62;
620 pub const TIMESTAMP_NEW = 63;
621 pub const TIMESTAMPNS_NEW = 64;
622 pub const TIMESTAMPING_NEW = 65;
623 pub const RCVTIMEO_NEW = 66;
624 pub const SNDTIMEO_NEW = 67;
625 pub const DETACH_REUSEPORT_BPF = 68;
626};
627
628pub const SOCK = struct {
629 pub const STREAM = 1;
630 pub const DGRAM = 2;
631 pub const RAW = 3;
632 pub const RDM = 4;
633 pub const SEQPACKET = 5;
634 pub const DCCP = 6;
635 pub const PACKET = 10;
636 pub const CLOEXEC = 0o2000000;
637 pub const NONBLOCK = 0o4000;
638};
639
640pub const SOL = struct {
641 pub const SOCKET = 1;
642
643 pub const IP = 0;
644 pub const IPV6 = 41;
645 pub const ICMPV6 = 58;
646
647 pub const RAW = 255;
648 pub const DECNET = 261;
649 pub const X25 = 262;
650 pub const PACKET = 263;
651 pub const ATM = 264;
652 pub const AAL = 265;
653 pub const IRDA = 266;
654 pub const NETBEUI = 267;
655 pub const LLC = 268;
656 pub const DCCP = 269;
657 pub const NETLINK = 270;
658 pub const TIPC = 271;
659 pub const RXRPC = 272;
660 pub const PPPOL2TP = 273;
661 pub const BLUETOOTH = 274;
662 pub const PNPIPE = 275;
663 pub const RDS = 276;
664 pub const IUCV = 277;
665 pub const CAIF = 278;
666 pub const ALG = 279;
667 pub const NFC = 280;
668 pub const KCM = 281;
669 pub const TLS = 282;
670 pub const XDP = 283;
671};
672
673pub const STDIN_FILENO = 0;
674pub const STDOUT_FILENO = 1;
675pub const STDERR_FILENO = 2;
676
677pub const TCP = struct {
678 pub const NODELAY = 1;
679 pub const MAXSEG = 2;
680 pub const CORK = 3;
681 pub const KEEPIDLE = 4;
682 pub const KEEPINTVL = 5;
683 pub const KEEPCNT = 6;
684 pub const SYNCNT = 7;
685 pub const LINGER2 = 8;
686 pub const DEFER_ACCEPT = 9;
687 pub const WINDOW_CLAMP = 10;
688 pub const INFO = 11;
689 pub const QUICKACK = 12;
690 pub const CONGESTION = 13;
691 pub const MD5SIG = 14;
692 pub const THIN_LINEAR_TIMEOUTS = 16;
693 pub const THIN_DUPACK = 17;
694 pub const USER_TIMEOUT = 18;
695 pub const REPAIR = 19;
696 pub const REPAIR_QUEUE = 20;
697 pub const QUEUE_SEQ = 21;
698 pub const REPAIR_OPTIONS = 22;
699 pub const FASTOPEN = 23;
700 pub const TIMESTAMP = 24;
701 pub const NOTSENT_LOWAT = 25;
702 pub const CC_INFO = 26;
703 pub const SAVE_SYN = 27;
704 pub const SAVED_SYN = 28;
705 pub const REPAIR_WINDOW = 29;
706 pub const FASTOPEN_CONNECT = 30;
707 pub const ULP = 31;
708 pub const MD5SIG_EXT = 32;
709 pub const FASTOPEN_KEY = 33;
710 pub const FASTOPEN_NO_COOKIE = 34;
711 pub const ZEROCOPY_RECEIVE = 35;
712 pub const INQ = 36;
713 pub const CM_INQ = INQ;
714 pub const TX_DELAY = 37;
715
716 pub const REPAIR_ON = 1;
717 pub const REPAIR_OFF = 0;
718 pub const REPAIR_OFF_NO_WP = -1;
719};
720
721pub const TCSA = std.posix.TCSA;
722pub const addrinfo = c.addrinfo;
723
724pub const in_port_t = c.in_port_t;
725pub const sa_family_t = c.sa_family_t;
726pub const socklen_t = c.socklen_t;
727pub const sockaddr = c.sockaddr;
728
729pub const blksize_t = i32;
730pub const nlink_t = u32;
731pub const time_t = i64;
732pub const mode_t = u32;
733pub const off_t = i64;
734pub const ino_t = u64;
735pub const dev_t = u32;
736pub const blkcnt_t = i32;
737
738pub const pid_t = i32;
739pub const fd_t = c.fd_t;
740pub const uid_t = u32;
741pub const gid_t = u32;
742pub const clock_t = i32;
743
744pub const dl_phdr_info = extern struct {
745 addr: usize,
746 name: ?[*:0]const u8,
747 phdr: [*]std.elf.Phdr,
748 phnum: u16,
749};
750
751pub const msghdr = std.c.msghdr;
752pub const msghdr_const = std.c.msghdr;
753
754pub const nfds_t = usize;
755pub const pollfd = extern struct {
756 fd: fd_t,
757 events: i16,
758 revents: i16,
759};
760
761pub const stack_t = extern struct {
762 sp: [*]u8,
763 flags: i32,
764 size: usize,
765};
766
767pub const timespec = extern struct {
768 sec: time_t,
769 nsec: isize,
770};
771
772pub const timezone = extern struct {
773 minuteswest: i32,
774 dsttime: i32,
775};
776
777pub const utsname = extern struct {
778 sysname: [64:0]u8,
779 nodename: [64:0]u8,
780 release: [64:0]u8,
781 version: [64:0]u8,
782 machine: [64:0]u8,
783 domainname: [64:0]u8,
784};
785
786pub const Stat = extern struct {
787 dev: dev_t,
788 mode: mode_t,
789 nlink: nlink_t,
790 uid: uid_t,
791 gid: gid_t,
792 rdev: dev_t,
793 size: off_t,
794 blksize: blksize_t,
795 blocks: blkcnt_t,
796 atim: timespec,
797 mtim: timespec,
798 ctim: timespec,
799 ino: ino_t,
800
801 pub fn atime(self: @This()) timespec {
802 return self.atim;
803 }
804
805 pub fn mtime(self: @This()) timespec {
806 return self.mtim;
807 }
808
809 pub fn ctime(self: @This()) timespec {
810 return self.ctim;
811 }
812};
813
814pub const TIMING = struct {
815 pub const SETTIMEOUT = 0;
816 pub const RAF = 1;
817 pub const SETIMMEDIATE = 2;
818};
819
820pub const LOG = struct {
821 pub const CONSOLE = 1;
822 pub const WARN = 2;
823 pub const ERROR = 4;
824 pub const C_STACK = 8;
825 pub const JS_STACK = 16;
826 pub const DEMANGLE = 32;
827 pub const NO_PATHS = 64;
828 pub const FUNC_PARAMS = 128;
829 pub const DEBUG = 256;
830 pub const INFO = 512;
831};
832
833pub const em_callback_func = ?*const fn () callconv(.c) void;
834pub const em_arg_callback_func = ?*const fn (?*anyopaque) callconv(.c) void;
835pub const em_str_callback_func = ?*const fn ([*:0]const u8) callconv(.c) void;
836
837pub extern "c" fn emscripten_async_wget(url: [*:0]const u8, file: [*:0]const u8, onload: em_str_callback_func, onerror: em_str_callback_func) void;
838
839pub const em_async_wget_onload_func = ?*const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.c) void;
840pub extern "c" fn emscripten_async_wget_data(url: [*:0]const u8, arg: ?*anyopaque, onload: em_async_wget_onload_func, onerror: em_arg_callback_func) void;
841
842pub const em_async_wget2_onload_func = ?*const fn (c_uint, ?*anyopaque, [*:0]const u8) callconv(.c) void;
843pub const em_async_wget2_onstatus_func = ?*const fn (c_uint, ?*anyopaque, c_int) callconv(.c) void;
844
845pub extern "c" fn emscripten_async_wget2(url: [*:0]const u8, file: [*:0]const u8, requesttype: [*:0]const u8, param: [*:0]const u8, arg: ?*anyopaque, onload: em_async_wget2_onload_func, onerror: em_async_wget2_onstatus_func, onprogress: em_async_wget2_onstatus_func) c_int;
846
847pub const em_async_wget2_data_onload_func = ?*const fn (c_uint, ?*anyopaque, ?*anyopaque, c_uint) callconv(.c) void;
848pub const em_async_wget2_data_onerror_func = ?*const fn (c_uint, ?*anyopaque, c_int, [*:0]const u8) callconv(.c) void;
849pub const em_async_wget2_data_onprogress_func = ?*const fn (c_uint, ?*anyopaque, c_int, c_int) callconv(.c) void;
850
851pub extern "c" fn emscripten_async_wget2_data(url: [*:0]const u8, requesttype: [*:0]const u8, param: [*:0]const u8, arg: ?*anyopaque, free: c_int, onload: em_async_wget2_data_onload_func, onerror: em_async_wget2_data_onerror_func, onprogress: em_async_wget2_data_onprogress_func) c_int;
852pub extern "c" fn emscripten_async_wget2_abort(handle: c_int) void;
853pub extern "c" fn emscripten_wget(url: [*:0]const u8, file: [*:0]const u8) c_int;
854pub extern "c" fn emscripten_wget_data(url: [*:0]const u8, pbuffer: *(?*anyopaque), pnum: *c_int, perror: *c_int) void;
855pub extern "c" fn emscripten_run_script(script: [*:0]const u8) void;
856pub extern "c" fn emscripten_run_script_int(script: [*:0]const u8) c_int;
857pub extern "c" fn emscripten_run_script_string(script: [*:0]const u8) [*:0]u8;
858pub extern "c" fn emscripten_async_run_script(script: [*:0]const u8, millis: c_int) void;
859pub extern "c" fn emscripten_async_load_script(script: [*:0]const u8, onload: em_callback_func, onerror: em_callback_func) void;
860pub extern "c" fn emscripten_set_main_loop(func: em_callback_func, fps: c_int, simulate_infinite_loop: c_int) void;
861pub extern "c" fn emscripten_set_main_loop_timing(mode: c_int, value: c_int) c_int;
862pub extern "c" fn emscripten_get_main_loop_timing(mode: *c_int, value: *c_int) void;
863pub extern "c" fn emscripten_set_main_loop_arg(func: em_arg_callback_func, arg: ?*anyopaque, fps: c_int, simulate_infinite_loop: c_int) void;
864pub extern "c" fn emscripten_pause_main_loop() void;
865pub extern "c" fn emscripten_resume_main_loop() void;
866pub extern "c" fn emscripten_cancel_main_loop() void;
867
868pub const em_socket_callback = ?*const fn (c_int, ?*anyopaque) callconv(.c) void;
869pub const em_socket_error_callback = ?*const fn (c_int, c_int, [*:0]const u8, ?*anyopaque) callconv(.c) void;
870
871pub extern "c" fn emscripten_set_socket_error_callback(userData: ?*anyopaque, callback: em_socket_error_callback) void;
872pub extern "c" fn emscripten_set_socket_open_callback(userData: ?*anyopaque, callback: em_socket_callback) void;
873pub extern "c" fn emscripten_set_socket_listen_callback(userData: ?*anyopaque, callback: em_socket_callback) void;
874pub extern "c" fn emscripten_set_socket_connection_callback(userData: ?*anyopaque, callback: em_socket_callback) void;
875pub extern "c" fn emscripten_set_socket_message_callback(userData: ?*anyopaque, callback: em_socket_callback) void;
876pub extern "c" fn emscripten_set_socket_close_callback(userData: ?*anyopaque, callback: em_socket_callback) void;
877pub extern "c" fn _emscripten_push_main_loop_blocker(func: em_arg_callback_func, arg: ?*anyopaque, name: [*:0]const u8) void;
878pub extern "c" fn _emscripten_push_uncounted_main_loop_blocker(func: em_arg_callback_func, arg: ?*anyopaque, name: [*:0]const u8) void;
879pub extern "c" fn emscripten_set_main_loop_expected_blockers(num: c_int) void;
880pub extern "c" fn emscripten_async_call(func: em_arg_callback_func, arg: ?*anyopaque, millis: c_int) void;
881pub extern "c" fn emscripten_exit_with_live_runtime() noreturn;
882pub extern "c" fn emscripten_force_exit(status: c_int) noreturn;
883pub extern "c" fn emscripten_get_device_pixel_ratio() f64;
884pub extern "c" fn emscripten_get_window_title() [*:0]u8;
885pub extern "c" fn emscripten_set_window_title([*:0]const u8) void;
886pub extern "c" fn emscripten_get_screen_size(width: *c_int, height: *c_int) void;
887pub extern "c" fn emscripten_hide_mouse() void;
888pub extern "c" fn emscripten_set_canvas_size(width: c_int, height: c_int) void;
889pub extern "c" fn emscripten_get_canvas_size(width: *c_int, height: *c_int, isFullscreen: *c_int) void;
890pub extern "c" fn emscripten_get_now() f64;
891pub extern "c" fn emscripten_random() f32;
892pub const em_idb_onload_func = ?*const fn (?*anyopaque, ?*anyopaque, c_int) callconv(.c) void;
893pub extern "c" fn emscripten_idb_async_load(db_name: [*:0]const u8, file_id: [*:0]const u8, arg: ?*anyopaque, onload: em_idb_onload_func, onerror: em_arg_callback_func) void;
894pub extern "c" fn emscripten_idb_async_store(db_name: [*:0]const u8, file_id: [*:0]const u8, ptr: ?*anyopaque, num: c_int, arg: ?*anyopaque, onstore: em_arg_callback_func, onerror: em_arg_callback_func) void;
895pub extern "c" fn emscripten_idb_async_delete(db_name: [*:0]const u8, file_id: [*:0]const u8, arg: ?*anyopaque, ondelete: em_arg_callback_func, onerror: em_arg_callback_func) void;
896pub const em_idb_exists_func = ?*const fn (?*anyopaque, c_int) callconv(.c) void;
897pub extern "c" fn emscripten_idb_async_exists(db_name: [*:0]const u8, file_id: [*:0]const u8, arg: ?*anyopaque, oncheck: em_idb_exists_func, onerror: em_arg_callback_func) void;
898pub extern "c" fn emscripten_idb_load(db_name: [*:0]const u8, file_id: [*:0]const u8, pbuffer: *?*anyopaque, pnum: *c_int, perror: *c_int) void;
899pub extern "c" fn emscripten_idb_store(db_name: [*:0]const u8, file_id: [*:0]const u8, buffer: *anyopaque, num: c_int, perror: *c_int) void;
900pub extern "c" fn emscripten_idb_delete(db_name: [*:0]const u8, file_id: [*:0]const u8, perror: *c_int) void;
901pub extern "c" fn emscripten_idb_exists(db_name: [*:0]const u8, file_id: [*:0]const u8, pexists: *c_int, perror: *c_int) void;
902pub extern "c" fn emscripten_idb_load_blob(db_name: [*:0]const u8, file_id: [*:0]const u8, pblob: *c_int, perror: *c_int) void;
903pub extern "c" fn emscripten_idb_store_blob(db_name: [*:0]const u8, file_id: [*:0]const u8, buffer: *anyopaque, num: c_int, perror: *c_int) void;
904pub extern "c" fn emscripten_idb_read_from_blob(blob: c_int, start: c_int, num: c_int, buffer: ?*anyopaque) void;
905pub extern "c" fn emscripten_idb_free_blob(blob: c_int) void;
906pub extern "c" fn emscripten_run_preload_plugins(file: [*:0]const u8, onload: em_str_callback_func, onerror: em_str_callback_func) c_int;
907pub const em_run_preload_plugins_data_onload_func = ?*const fn (?*anyopaque, [*:0]const u8) callconv(.c) void;
908pub extern "c" fn emscripten_run_preload_plugins_data(data: [*]u8, size: c_int, suffix: [*:0]const u8, arg: ?*anyopaque, onload: em_run_preload_plugins_data_onload_func, onerror: em_arg_callback_func) void;
909pub extern "c" fn emscripten_lazy_load_code() void;
910pub const worker_handle = c_int;
911pub extern "c" fn emscripten_create_worker(url: [*:0]const u8) worker_handle;
912pub extern "c" fn emscripten_destroy_worker(worker: worker_handle) void;
913pub const em_worker_callback_func = ?*const fn ([*]u8, c_int, ?*anyopaque) callconv(.c) void;
914pub extern "c" fn emscripten_call_worker(worker: worker_handle, funcname: [*:0]const u8, data: [*]u8, size: c_int, callback: em_worker_callback_func, arg: ?*anyopaque) void;
915pub extern "c" fn emscripten_worker_respond(data: [*]u8, size: c_int) void;
916pub extern "c" fn emscripten_worker_respond_provisionally(data: [*]u8, size: c_int) void;
917pub extern "c" fn emscripten_get_worker_queue_size(worker: worker_handle) c_int;
918pub extern "c" fn emscripten_get_compiler_setting(name: [*:0]const u8) c_long;
919pub extern "c" fn emscripten_has_asyncify() c_int;
920pub extern "c" fn emscripten_debugger() void;
921
922pub extern "c" fn emscripten_get_preloaded_image_data(path: [*:0]const u8, w: *c_int, h: *c_int) ?[*]u8;
923pub extern "c" fn emscripten_get_preloaded_image_data_from_FILE(file: *FILE, w: *c_int, h: *c_int) ?[*]u8;
924pub extern "c" fn emscripten_log(flags: c_int, format: [*:0]const u8, ...) void;
925pub extern "c" fn emscripten_get_callstack(flags: c_int, out: ?[*]u8, maxbytes: c_int) c_int;
926pub extern "c" fn emscripten_print_double(x: f64, to: ?[*]u8, max: c_int) c_int;
927pub const em_scan_func = ?*const fn (?*anyopaque, ?*anyopaque) callconv(.c) void;
928pub extern "c" fn emscripten_scan_registers(func: em_scan_func) void;
929pub extern "c" fn emscripten_scan_stack(func: em_scan_func) void;
930pub const em_dlopen_callback = ?*const fn (?*anyopaque, ?*anyopaque) callconv(.c) void;
931pub extern "c" fn emscripten_dlopen(filename: [*:0]const u8, flags: c_int, user_data: ?*anyopaque, onsuccess: em_dlopen_callback, onerror: em_arg_callback_func) void;
932pub extern "c" fn emscripten_dlopen_promise(filename: [*:0]const u8, flags: c_int) em_promise_t;
933pub extern "c" fn emscripten_throw_number(number: f64) void;
934pub extern "c" fn emscripten_throw_string(utf8String: [*:0]const u8) void;
935pub extern "c" fn emscripten_sleep(ms: c_uint) void;
936
937pub const PROMISE = struct {
938 pub const FULFILL = 0;
939 pub const MATCH = 1;
940 pub const MATCH_RELEASE = 2;
941 pub const REJECT = 3;
942};
943
944pub const struct__em_promise = opaque {};
945pub const em_promise_t = ?*struct__em_promise;
946pub const enum_em_promise_result_t = c_uint;
947pub const em_promise_result_t = enum_em_promise_result_t;
948pub const em_promise_callback_t = ?*const fn (?*?*anyopaque, ?*anyopaque, ?*anyopaque) callconv(.c) em_promise_result_t;
949
950pub extern "c" fn emscripten_promise_create() em_promise_t;
951pub extern "c" fn emscripten_promise_destroy(promise: em_promise_t) void;
952pub extern "c" fn emscripten_promise_resolve(promise: em_promise_t, result: em_promise_result_t, value: ?*anyopaque) void;
953pub extern "c" fn emscripten_promise_then(promise: em_promise_t, on_fulfilled: em_promise_callback_t, on_rejected: em_promise_callback_t, data: ?*anyopaque) em_promise_t;
954pub extern "c" fn emscripten_promise_all(promises: [*]em_promise_t, results: ?[*]?*anyopaque, num_promises: usize) em_promise_t;
955
956pub const struct_em_settled_result_t = extern struct {
957 result: em_promise_result_t,
958 value: ?*anyopaque,
959};
960pub const em_settled_result_t = struct_em_settled_result_t;