diff options
| author | hryx <codroid@gmail.com> | 2019-05-27 17:24:21 -0700 |
|---|---|---|
| committer | hryx <codroid@gmail.com> | 2019-05-27 17:24:21 -0700 |
| commit | e1f3eec9cc05535b3f3b81f2fb7cd65dd4d1e841 (patch) | |
| tree | 5f408ed68a686491eaf759f9cbba02beac829b38 /std/c | |
| parent | 2aa1c5da5dded6b1b346c3a1b57443f2c459ebe9 (diff) | |
| parent | 3fccc0747903f0726d6cc8ee73832cb62f1304bb (diff) | |
| download | zig-e1f3eec9cc05535b3f3b81f2fb7cd65dd4d1e841.tar.gz zig-e1f3eec9cc05535b3f3b81f2fb7cd65dd4d1e841.zip | |
Merge branch 'master' into translate-c-userland
Diffstat (limited to 'std/c')
| -rw-r--r-- | std/c/darwin.zig | 193 | ||||
| -rw-r--r-- | std/c/freebsd.zig | 150 | ||||
| -rw-r--r-- | std/c/linux.zig | 30 | ||||
| -rw-r--r-- | std/c/netbsd.zig | 146 |
4 files changed, 36 insertions, 483 deletions
diff --git a/std/c/darwin.zig b/std/c/darwin.zig index 0e92e8d411..e45a158f68 100644 --- a/std/c/darwin.zig +++ b/std/c/darwin.zig @@ -1,24 +1,19 @@ -const macho = @import("../macho.zig"); +const std = @import("../std.zig"); +const assert = std.debug.assert; +const builtin = @import("builtin"); +const macho = std.macho; + +use @import("../os/bits.zig"); extern "c" fn __error() *c_int; pub extern "c" fn _NSGetExecutablePath(buf: [*]u8, bufsize: *u32) c_int; pub extern "c" fn _dyld_get_image_header(image_index: u32) ?*mach_header; -pub extern "c" fn __getdirentries64(fd: c_int, buf_ptr: [*]u8, buf_len: usize, basep: *i64) usize; +pub extern "c" fn __getdirentries64(fd: c_int, buf_ptr: [*]u8, buf_len: usize, basep: *i64) isize; pub extern "c" fn mach_absolute_time() u64; pub extern "c" fn mach_timebase_info(tinfo: ?*mach_timebase_info_data) void; -pub extern "c" fn kqueue() c_int; -pub extern "c" fn kevent( - kq: c_int, - changelist: [*]const Kevent, - nchanges: c_int, - eventlist: [*]Kevent, - nevents: c_int, - timeout: ?*const timespec, -) c_int; - pub extern "c" fn kevent64( kq: c_int, changelist: [*]const kevent64_s, @@ -29,13 +24,6 @@ pub extern "c" fn kevent64( timeout: ?*const timespec, ) c_int; -pub extern "c" fn sysctl(name: [*]c_int, namelen: c_uint, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlbyname(name: [*]const u8, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlnametomib(name: [*]const u8, mibp: ?*c_int, sizep: ?*usize) c_int; - -pub extern "c" fn bind(socket: c_int, address: ?*const sockaddr, address_len: socklen_t) c_int; -pub extern "c" fn socket(domain: c_int, type: c_int, protocol: c_int) c_int; - const mach_hdr = if (@sizeOf(usize) == 8) mach_header_64 else mach_header; /// The value of the link editor defined symbol _MH_EXECUTE_SYM is the address @@ -48,170 +36,21 @@ const mach_hdr = if (@sizeOf(usize) == 8) mach_header_64 else mach_header; /// export a weak symbol here, to be overridden by the real one. pub extern "c" var _mh_execute_header: mach_hdr = undefined; comptime { - @export("__mh_execute_header", _mh_execute_header, @import("builtin").GlobalLinkage.Weak); + if (std.os.darwin.is_the_target) { + @export("__mh_execute_header", _mh_execute_header, .Weak); + } } pub const mach_header_64 = macho.mach_header_64; pub const mach_header = macho.mach_header; -pub use @import("../os/darwin/errno.zig"); - pub const _errno = __error; -pub const in_port_t = u16; -pub const sa_family_t = u8; -pub const socklen_t = u32; -pub const sockaddr = extern union { - in: sockaddr_in, - in6: sockaddr_in6, -}; -pub const sockaddr_in = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - addr: u32, - zero: [8]u8, -}; -pub const sockaddr_in6 = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - flowinfo: u32, - addr: [16]u8, - scope_id: u32, -}; - -pub const timeval = extern struct { - tv_sec: c_long, - tv_usec: i32, -}; - -pub const timezone = extern struct { - tz_minuteswest: i32, - tz_dsttime: i32, -}; - -pub const mach_timebase_info_data = extern struct { - numer: u32, - denom: u32, -}; - -/// Renamed to Stat to not conflict with the stat function. -pub const Stat = extern struct { - dev: i32, - mode: u16, - nlink: u16, - ino: u64, - uid: u32, - gid: u32, - rdev: i32, - atime: usize, - atimensec: usize, - mtime: usize, - mtimensec: usize, - ctime: usize, - ctimensec: usize, - birthtime: usize, - birthtimensec: usize, - size: i64, - blocks: i64, - blksize: i32, - flags: u32, - gen: u32, - lspare: i32, - qspare: [2]i64, -}; +pub extern "c" fn mach_host_self() mach_port_t; +pub extern "c" fn clock_get_time(clock_serv: clock_serv_t, cur_time: *mach_timespec_t) kern_return_t; +pub extern "c" fn host_get_clock_service(host: host_t, clock_id: clock_id_t, clock_serv: ?[*]clock_serv_t) kern_return_t; +pub extern "c" fn mach_port_deallocate(task: ipc_space_t, name: mach_port_name_t) kern_return_t; -pub const timespec = extern struct { - tv_sec: isize, - tv_nsec: isize, -}; - -pub const sigset_t = u32; - -/// Renamed from `sigaction` to `Sigaction` to avoid conflict with function name. -pub const Sigaction = extern struct { - handler: extern fn (c_int) void, - sa_mask: sigset_t, - sa_flags: c_int, -}; - -pub const dirent = extern struct { - d_ino: usize, - d_seekoff: usize, - d_reclen: u16, - d_namlen: u16, - d_type: u8, - d_name: u8, // field address is address of first byte of name -}; - -pub const pthread_attr_t = extern struct { - __sig: c_long, - __opaque: [56]u8, -}; - -/// Renamed from `kevent` to `Kevent` to avoid conflict with function name. -pub const Kevent = extern struct { - ident: usize, - filter: i16, - flags: u16, - fflags: u32, - data: isize, - udata: usize, -}; - -// sys/types.h on macos uses #pragma pack(4) so these checks are -// to make sure the struct is laid out the same. These values were -// produced from C code using the offsetof macro. -const std = @import("../std.zig"); -const assert = std.debug.assert; - -comptime { - assert(@byteOffsetOf(Kevent, "ident") == 0); - assert(@byteOffsetOf(Kevent, "filter") == 8); - assert(@byteOffsetOf(Kevent, "flags") == 10); - assert(@byteOffsetOf(Kevent, "fflags") == 12); - assert(@byteOffsetOf(Kevent, "data") == 16); - assert(@byteOffsetOf(Kevent, "udata") == 24); -} - -pub const kevent64_s = extern struct { - ident: u64, - filter: i16, - flags: u16, - fflags: u32, - data: i64, - udata: u64, - ext: [2]u64, -}; - -pub const mach_port_t = c_uint; -pub const clock_serv_t = mach_port_t; -pub const clock_res_t = c_int; -pub const mach_port_name_t = natural_t; -pub const natural_t = c_uint; -pub const mach_timespec_t = extern struct { - tv_sec: c_uint, - tv_nsec: clock_res_t, -}; -pub const kern_return_t = c_int; -pub const host_t = mach_port_t; -pub const CALENDAR_CLOCK = 1; - -pub extern fn mach_host_self() mach_port_t; -pub extern fn clock_get_time(clock_serv: clock_serv_t, cur_time: *mach_timespec_t) kern_return_t; -pub extern fn host_get_clock_service(host: host_t, clock_id: clock_id_t, clock_serv: ?[*]clock_serv_t) kern_return_t; -pub extern fn mach_port_deallocate(task: ipc_space_t, name: mach_port_name_t) kern_return_t; - -// sys/types.h on macos uses #pragma pack() so these checks are -// to make sure the struct is laid out the same. These values were -// produced from C code using the offsetof macro. -comptime { - assert(@byteOffsetOf(kevent64_s, "ident") == 0); - assert(@byteOffsetOf(kevent64_s, "filter") == 8); - assert(@byteOffsetOf(kevent64_s, "flags") == 10); - assert(@byteOffsetOf(kevent64_s, "fflags") == 12); - assert(@byteOffsetOf(kevent64_s, "data") == 16); - assert(@byteOffsetOf(kevent64_s, "udata") == 24); - assert(@byteOffsetOf(kevent64_s, "ext") == 32); +pub fn sigaddset(set: *sigset_t, signo: u5) void { + set.* |= u32(1) << (signo - 1); } diff --git a/std/c/freebsd.zig b/std/c/freebsd.zig index 1f8e314333..70f3aeb9ca 100644 --- a/std/c/freebsd.zig +++ b/std/c/freebsd.zig @@ -1,154 +1,4 @@ extern "c" fn __error() *c_int; pub const _errno = __error; -pub extern "c" fn kqueue() c_int; -pub extern "c" fn kevent( - kq: c_int, - changelist: [*]const Kevent, - nchanges: c_int, - eventlist: [*]Kevent, - nevents: c_int, - timeout: ?*const timespec, -) c_int; -pub extern "c" fn sysctl(name: [*]c_int, namelen: c_uint, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlbyname(name: [*]const u8, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlnametomib(name: [*]const u8, mibp: ?*c_int, sizep: ?*usize) c_int; -pub extern "c" fn getdirentries(fd: c_int, buf_ptr: [*]u8, nbytes: usize, basep: *i64) usize; pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize; -pub extern "c" fn pipe2(arg0: *[2]c_int, arg1: u32) c_int; -pub extern "c" fn preadv(fd: c_int, iov: *const c_void, iovcnt: c_int, offset: usize) isize; -pub extern "c" fn pwritev(fd: c_int, iov: *const c_void, iovcnt: c_int, offset: usize) isize; -pub extern "c" fn openat(fd: c_int, path: ?[*]const u8, flags: c_int) c_int; -pub extern "c" fn setgid(ruid: c_uint, euid: c_uint) c_int; -pub extern "c" fn setuid(uid: c_uint) c_int; -pub extern "c" fn kill(pid: c_int, sig: c_int) c_int; -pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int; -pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int; - -/// Renamed from `kevent` to `Kevent` to avoid conflict with function name. -pub const Kevent = extern struct { - ident: usize, - filter: i16, - flags: u16, - fflags: u32, - data: i64, - udata: usize, - // TODO ext -}; - -pub const pthread_attr_t = extern struct { - __size: [56]u8, - __align: c_long, -}; - -pub const msghdr = extern struct { - /// optional address - msg_name: ?*sockaddr, - - /// size of address - msg_namelen: socklen_t, - - /// scatter/gather array - msg_iov: [*]iovec, - - /// # elements in msg_iov - msg_iovlen: i32, - - /// ancillary data - msg_control: ?*c_void, - - /// ancillary data buffer len - msg_controllen: socklen_t, - - /// flags on received message - msg_flags: i32, -}; - -pub const msghdr_const = extern struct { - /// optional address - msg_name: ?*const sockaddr, - - /// size of address - msg_namelen: socklen_t, - - /// scatter/gather array - msg_iov: [*]iovec_const, - - /// # elements in msg_iov - msg_iovlen: i32, - - /// ancillary data - msg_control: ?*c_void, - - /// ancillary data buffer len - msg_controllen: socklen_t, - - /// flags on received message - msg_flags: i32, -}; - -pub const Stat = extern struct { - dev: u64, - ino: u64, - nlink: usize, - - mode: u16, - __pad0: u16, - uid: u32, - gid: u32, - __pad1: u32, - rdev: u64, - - atim: timespec, - mtim: timespec, - ctim: timespec, - birthtim: timespec, - - size: i64, - blocks: i64, - blksize: isize, - flags: u32, - gen: u64, - __spare: [10]u64, -}; - -pub const timespec = extern struct { - tv_sec: isize, - tv_nsec: isize, -}; - -pub const dirent = extern struct { - d_fileno: usize, - d_off: i64, - d_reclen: u16, - d_type: u8, - d_pad0: u8, - d_namlen: u16, - d_pad1: u16, - d_name: [256]u8, -}; - -pub const in_port_t = u16; -pub const sa_family_t = u16; - -pub const sockaddr = extern union { - in: sockaddr_in, - in6: sockaddr_in6, -}; - -pub const sockaddr_in = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - addr: [16]u8, - zero: [8]u8, -}; - -pub const sockaddr_in6 = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - flowinfo: u32, - addr: [16]u8, - scope_id: u32, -}; diff --git a/std/c/linux.zig b/std/c/linux.zig index 48e359f361..9e028728c7 100644 --- a/std/c/linux.zig +++ b/std/c/linux.zig @@ -1,17 +1,27 @@ -const linux = @import("../os/linux.zig"); -pub use @import("../os/linux/errno.zig"); +const std = @import("../std.zig"); +use std.c; -pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) c_int; extern "c" fn __errno_location() *c_int; pub const _errno = __errno_location; -pub const pthread_attr_t = extern struct { - __size: [56]u8, - __align: c_long, -}; +pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) c_int; +pub extern "c" fn sched_getaffinity(pid: c_int, size: usize, set: *cpu_set_t) c_int; +pub extern "c" fn eventfd(initval: c_uint, flags: c_uint) c_int; +pub extern "c" fn epoll_ctl(epfd: fd_t, op: c_uint, fd: fd_t, event: *epoll_event) c_int; +pub extern "c" fn epoll_create1(flags: c_uint) c_int; +pub extern "c" fn epoll_wait(epfd: fd_t, events: [*]epoll_event, maxevents: c_uint, timeout: c_int) c_int; +pub extern "c" fn epoll_pwait( + epfd: fd_t, + events: [*]epoll_event, + maxevents: c_int, + timeout: c_int, + sigmask: *const sigset_t, +) c_int; +pub extern "c" fn inotify_init1(flags: c_uint) c_int; +pub extern "c" fn inotify_add_watch(fd: fd_t, pathname: [*]const u8, mask: u32) c_int; /// See std.elf for constants for this -pub extern fn getauxval(__type: c_ulong) c_ulong; +pub extern "c" fn getauxval(__type: c_ulong) c_ulong; -pub const dl_iterate_phdr_callback = extern fn (info: *linux.dl_phdr_info, size: usize, data: ?*c_void) c_int; -pub extern fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int; +pub const dl_iterate_phdr_callback = extern fn (info: *dl_phdr_info, size: usize, data: ?*c_void) c_int; +pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int; diff --git a/std/c/netbsd.zig b/std/c/netbsd.zig index ef3da91bea..c677e1500b 100644 --- a/std/c/netbsd.zig +++ b/std/c/netbsd.zig @@ -1,150 +1,4 @@ extern "c" fn __errno() *c_int; pub const _errno = __errno; -pub extern "c" fn kqueue() c_int; -pub extern "c" fn kevent( - kq: c_int, - changelist: [*]const Kevent, - nchanges: c_int, - eventlist: [*]Kevent, - nevents: c_int, - timeout: ?*const timespec, -) c_int; -pub extern "c" fn sysctl(name: [*]c_int, namelen: c_uint, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlbyname(name: [*]const u8, oldp: ?*c_void, oldlenp: ?*usize, newp: ?*c_void, newlen: usize) c_int; -pub extern "c" fn sysctlnametomib(name: [*]const u8, mibp: ?*c_int, sizep: ?*usize) c_int; -pub extern "c" fn getdirentries(fd: c_int, buf_ptr: [*]u8, nbytes: usize, basep: *i64) usize; pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize; -pub extern "c" fn pipe2(arg0: *[2]c_int, arg1: u32) c_int; -pub extern "c" fn preadv(fd: c_int, iov: *const c_void, iovcnt: c_int, offset: usize) isize; -pub extern "c" fn pwritev(fd: c_int, iov: *const c_void, iovcnt: c_int, offset: usize) isize; -pub extern "c" fn openat(fd: c_int, path: ?[*]const u8, flags: c_int) c_int; -pub extern "c" fn setgid(ruid: c_uint, euid: c_uint) c_int; -pub extern "c" fn setuid(uid: c_uint) c_int; -pub extern "c" fn kill(pid: c_int, sig: c_int) c_int; -pub extern "c" fn clock_gettime(clk_id: c_int, tp: *timespec) c_int; -pub extern "c" fn clock_getres(clk_id: c_int, tp: *timespec) c_int; - -/// Renamed from `kevent` to `Kevent` to avoid conflict with function name. -pub const Kevent = extern struct { - ident: usize, - filter: i32, - flags: u32, - fflags: u32, - data: i64, - udata: usize, -}; - -pub const pthread_attr_t = extern struct { - pta_magic: u32, - pta_flags: c_int, - pta_private: *c_void, -}; - -pub const msghdr = extern struct { - /// optional address - msg_name: ?*sockaddr, - - /// size of address - msg_namelen: socklen_t, - - /// scatter/gather array - msg_iov: [*]iovec, - - /// # elements in msg_iov - msg_iovlen: i32, - - /// ancillary data - msg_control: ?*c_void, - - /// ancillary data buffer len - msg_controllen: socklen_t, - - /// flags on received message - msg_flags: i32, -}; - -pub const msghdr_const = extern struct { - /// optional address - msg_name: ?*const sockaddr, - - /// size of address - msg_namelen: socklen_t, - - /// scatter/gather array - msg_iov: [*]iovec_const, - - /// # elements in msg_iov - msg_iovlen: i32, - - /// ancillary data - msg_control: ?*c_void, - - /// ancillary data buffer len - msg_controllen: socklen_t, - - /// flags on received message - msg_flags: i32, -}; - -pub const Stat = extern struct { - dev: u64, - mode: u32, - ino: u64, - nlink: usize, - - uid: u32, - gid: u32, - rdev: u64, - - atim: timespec, - mtim: timespec, - ctim: timespec, - birthtim: timespec, - - size: i64, - blocks: i64, - blksize: isize, - flags: u32, - gen: u32, - __spare: [2]u32, -}; - -pub const timespec = extern struct { - tv_sec: i64, - tv_nsec: isize, -}; - -pub const dirent = extern struct { - d_fileno: u64, - d_reclen: u16, - d_namlen: u16, - d_type: u8, - d_off: i64, - d_name: [512]u8, -}; - -pub const in_port_t = u16; -pub const sa_family_t = u8; - -pub const sockaddr = extern union { - in: sockaddr_in, - in6: sockaddr_in6, -}; - -pub const sockaddr_in = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - addr: u32, - zero: [8]u8, -}; - -pub const sockaddr_in6 = extern struct { - len: u8, - family: sa_family_t, - port: in_port_t, - flowinfo: u32, - addr: [16]u8, - scope_id: u32, -}; |
