From cda73c3c189924bc085d1e89a9592d6632365c90 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Mon, 23 Mar 2020 18:55:45 +0100 Subject: [PATCH] std: Add missing C bits and defines for NetBSD --- lib/std/os/bits/netbsd.zig | 162 +++++++++++++++++++++++++++++++------ 1 file changed, 138 insertions(+), 24 deletions(-) diff --git a/lib/std/os/bits/netbsd.zig b/lib/std/os/bits/netbsd.zig index c99d1b3b38..a26fdee2a9 100644 --- a/lib/std/os/bits/netbsd.zig +++ b/lib/std/os/bits/netbsd.zig @@ -25,6 +25,65 @@ pub const dl_phdr_info = extern struct { dlpi_phnum: u16, }; +pub const addrinfo = extern struct { + flags: i32, + family: i32, + socktype: i32, + protocol: i32, + addrlen: socklen_t, + canonname: ?[*:0]u8, + addr: ?*sockaddr, + next: ?*addrinfo, +}; + +pub const EAI = extern enum(c_int) { + /// address family for hostname not supported + ADDRFAMILY = 1, + + /// name could not be resolved at this time + AGAIN = 2, + + /// flags parameter had an invalid value + BADFLAGS = 3, + + /// non-recoverable failure in name resolution + FAIL = 4, + + /// address family not recognized + FAMILY = 5, + + /// memory allocation failure + MEMORY = 6, + + /// no address associated with hostname + NODATA = 7, + + /// name does not resolve + NONAME = 8, + + /// service not recognized for socket type + SERVICE = 9, + + /// intended socket type was not recognized + SOCKTYPE = 10, + + /// system error returned in errno + SYSTEM = 11, + + /// invalid value for hints + BADHINTS = 12, + + /// resolved protocol is unknown + PROTOCOL = 13, + + /// argument buffer overflow + OVERFLOW = 14, + + _, +}; + +pub const EAI_MAX = 15; + pub const msghdr = extern struct { /// optional address msg_name: ?*sockaddr, @@ -122,7 +181,6 @@ pub const dirent = extern struct { d_reclen: u16, d_namlen: u16, d_type: u8, - d_off: i64, d_name: [512]u8, pub fn reclen(self: dirent) u16 { @@ -146,7 +204,7 @@ pub const sockaddr = extern struct { pub const sockaddr_in = extern struct { len: u8 = @sizeOf(sockaddr_in), - family: sa_family_t, + family: sa_family_t = AF_INET, port: in_port_t, addr: u32, zero: [8]u8 = [8]u8{ 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -154,7 +212,7 @@ pub const sockaddr_in = extern struct { pub const sockaddr_in6 = extern struct { len: u8 = @sizeOf(sockaddr_in6), - family: sa_family_t, + family: sa_family_t = AF_INET6, port: in_port_t, flowinfo: u32, addr: [16]u8, @@ -167,12 +225,27 @@ pub const sockaddr_un = extern struct { len: u8 = @sizeOf(sockaddr_un), /// AF_LOCAL - family: sa_family_t, + family: sa_family_t = AF_LOCAL, /// path name path: [104]u8, }; +/// get address to use bind() +pub const AI_PASSIVE = 0x00000001; + +/// fill ai_canonname +pub const AI_CANONNAME = 0x00000002; + +/// prevent host name resolution +pub const AI_NUMERICHOST = 0x00000004; + +/// prevent service name resolution +pub const AI_NUMERICSERV = 0x00000008; + +/// only if any address is assigned +pub const AI_ADDRCONFIG = 0x00000400; + pub const CTL_KERN = 1; pub const CTL_DEBUG = 5; @@ -274,30 +347,71 @@ pub const X_OK = 1; // test for execute or search permission pub const W_OK = 2; // test for write permission pub const R_OK = 4; // test for read permission -pub const O_RDONLY = 0x0000; -pub const O_WRONLY = 0x0001; -pub const O_RDWR = 0x0002; -pub const O_ACCMODE = 0x0003; +/// open for reading only +pub const O_RDONLY = 0x00000000; -pub const O_CREAT = 0x0200; -pub const O_EXCL = 0x0800; -pub const O_NOCTTY = 0x8000; -pub const O_TRUNC = 0x0400; -pub const O_APPEND = 0x0008; -pub const O_NONBLOCK = 0x0004; -pub const O_DSYNC = 0x00010000; -pub const O_SYNC = 0x0080; -pub const O_RSYNC = 0x00020000; -pub const O_DIRECTORY = 0x00080000; +/// open for writing only +pub const O_WRONLY = 0x00000001; + +/// open for reading and writing +pub const O_RDWR = 0x00000002; + +/// mask for above modes +pub const O_ACCMODE = 0x00000003; + +/// no delay +pub const O_NONBLOCK = 0x00000004; + +/// set append mode +pub const O_APPEND = 0x00000008; + +/// open with shared file lock +pub const O_SHLOCK = 0x00000010; + +/// open with exclusive file lock +pub const O_EXLOCK = 0x00000020; + +/// signal pgrp when data ready +pub const O_ASYNC = 0x00000040; + +/// synchronous writes +pub const O_SYNC = 0x00000080; + +/// don't follow symlinks on the last pub const O_NOFOLLOW = 0x00000100; + +/// create if nonexistent +pub const O_CREAT = 0x00000200; + +/// truncate to zero length +pub const O_TRUNC = 0x00000400; + +/// error if already exists +pub const O_EXCL = 0x00000800; + +/// don't assign controlling terminal +pub const O_NOCTTY = 0x00008000; + +/// write: I/O data completion +pub const O_DSYNC = 0x00010000; + +/// read: I/O completion as for write +pub const O_RSYNC = 0x00020000; + +/// use alternate i/o semantics +pub const O_ALT_IO = 0x00040000; + +/// direct I/O hint +pub const O_DIRECT = 0x00080000; + +/// fail if not a directory +pub const O_DIRECTORY = 0x00200000; + +/// set close on exec pub const O_CLOEXEC = 0x00400000; -pub const O_ASYNC = 0x0040; -pub const O_DIRECT = 0x00080000; -pub const O_NOATIME = 0; -pub const O_PATH = 0; -pub const O_TMPFILE = 0; -pub const O_NDELAY = O_NONBLOCK; +/// skip search permission checks +pub const O_SEARCH = 0x00800000; pub const F_DUPFD = 0; pub const F_GETFD = 1;