aboutsummaryrefslogtreecommitdiff
path: root/lib/std/c
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-09-26 01:54:45 -0400
committerGitHub <noreply@github.com>2019-09-26 01:54:45 -0400
commit68bb3945708c43109c48bda3664176307d45b62c (patch)
treeafb9731e10cef9d192560b52cd9ae2cf179775c4 /lib/std/c
parent6128bc728d1e1024a178c16c2149f5b1a167a013 (diff)
parent4637e8f9699af9c3c6cf4df50ef5bb67c7a318a4 (diff)
downloadzig-68bb3945708c43109c48bda3664176307d45b62c.tar.gz
zig-68bb3945708c43109c48bda3664176307d45b62c.zip
Merge pull request #3315 from ziglang/mv-std-lib
Move std/ to lib/std/
Diffstat (limited to 'lib/std/c')
-rw-r--r--lib/std/c/darwin.zig58
-rw-r--r--lib/std/c/freebsd.zig12
-rw-r--r--lib/std/c/linux.zig32
-rw-r--r--lib/std/c/netbsd.zig8
-rw-r--r--lib/std/c/windows.zig1
5 files changed, 111 insertions, 0 deletions
diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig
new file mode 100644
index 0000000000..f2e8120a0e
--- /dev/null
+++ b/lib/std/c/darwin.zig
@@ -0,0 +1,58 @@
+const std = @import("../std.zig");
+const assert = std.debug.assert;
+const builtin = @import("builtin");
+const macho = std.macho;
+
+usingnamespace @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) 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 kevent64(
+ kq: c_int,
+ changelist: [*]const kevent64_s,
+ nchanges: c_int,
+ eventlist: [*]kevent64_s,
+ nevents: c_int,
+ flags: c_uint,
+ timeout: ?*const timespec,
+) 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
+/// of the mach header in a Mach-O executable file type. It does not appear in
+/// any file type other than a MH_EXECUTE file type. The type of the symbol is
+/// absolute as the header is not part of any section.
+/// This symbol is populated when linking the system's libc, which is guaranteed
+/// on this operating system. However when building object files or libraries,
+/// the system libc won't be linked until the final executable. So we
+/// export a weak symbol here, to be overridden by the real one.
+pub extern "c" var _mh_execute_header: mach_hdr = undefined;
+comptime {
+ 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 const _errno = __error;
+
+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 fn sigaddset(set: *sigset_t, signo: u5) void {
+ set.* |= u32(1) << (signo - 1);
+}
+
+pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig
new file mode 100644
index 0000000000..550b5a59b1
--- /dev/null
+++ b/lib/std/c/freebsd.zig
@@ -0,0 +1,12 @@
+const std = @import("../std.zig");
+usingnamespace std.c;
+
+extern "c" fn __error() *c_int;
+pub const _errno = __error;
+
+pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
+pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
+pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
+
+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/lib/std/c/linux.zig b/lib/std/c/linux.zig
new file mode 100644
index 0000000000..b3b3cbdde7
--- /dev/null
+++ b/lib/std/c/linux.zig
@@ -0,0 +1,32 @@
+const std = @import("../std.zig");
+const maxInt = std.math.maxInt;
+usingnamespace std.c;
+
+extern "c" fn __errno_location() *c_int;
+pub const _errno = __errno_location;
+
+pub const MAP_FAILED = @intToPtr(*c_void, maxInt(usize));
+
+pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
+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 "c" fn getauxval(__type: c_ulong) c_ulong;
+
+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;
+
+pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig
new file mode 100644
index 0000000000..417c78db69
--- /dev/null
+++ b/lib/std/c/netbsd.zig
@@ -0,0 +1,8 @@
+const std = @import("../std.zig");
+usingnamespace std.c;
+
+extern "c" fn __errno() *c_int;
+pub const _errno = __errno;
+
+pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
+pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
diff --git a/lib/std/c/windows.zig b/lib/std/c/windows.zig
new file mode 100644
index 0000000000..35ca217131
--- /dev/null
+++ b/lib/std/c/windows.zig
@@ -0,0 +1 @@
+pub extern "c" fn _errno() *c_int;