diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index ad3fc383d9f5564d88ffec430d390f8cb75fd9bb..0cc439d07da7d8a6c0de39a65bf83800ea9b6992 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -719,10 +719,9 @@ const PosixThreadImpl = struct { }, .haiku => { var system_info: std.c.system_info = undefined; - const rc = std.c.get_system_info(&system_info); // always returns B_OK - return switch (posix.errno(rc)) { - .SUCCESS => @as(usize, @intCast(system_info.cpu_count)), - else => |err| posix.unexpectedErrno(err), + return switch (std.c.get_system_info(&system_info)) { + 0 => @as(usize, @intCast(system_info.cpu_count)), + else => error.Unexpected, }; }, else => { diff --git a/lib/std/c.zig b/lib/std/c.zig index 9f0feda6b37e4146bcebbdf26bdb97aefb4e7508..7d9a4b1d49caa7755db57477cdf9a6703ff3ecf2 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -11267,31 +11267,23 @@ pub const signalfd_siginfo = illumos.signalfd_siginfo; pub const taskid_t = illumos.taskid_t; pub const zoneid_t = illumos.zoneid_t; +pub const B_OS_NAME_LENGTH = haiku.B_OS_NAME_LENGTH; pub const DirEnt = haiku.DirEnt; -pub const _get_next_area_info = haiku._get_next_area_info; -pub const _get_next_image_info = haiku._get_next_image_info; -pub const _get_team_info = haiku._get_team_info; -pub const _kern_get_current_team = haiku._kern_get_current_team; pub const _kern_open_dir = haiku._kern_open_dir; pub const _kern_read_dir = haiku._kern_read_dir; pub const _kern_read_stat = haiku._kern_read_stat; pub const _kern_rewind_dir = haiku._kern_rewind_dir; -pub const readv_pos = haiku.readv_pos; -pub const writev_pos = haiku.writev_pos; pub const area_id = haiku.area_id; -pub const area_info = haiku.area_info; -pub const directory_which = haiku.directory_which; -pub const find_directory = haiku.find_directory; pub const find_thread = haiku.find_thread; pub const get_system_info = haiku.get_system_info; -pub const image_info = haiku.image_info; pub const port_id = haiku.port_id; +pub const readv_pos = haiku.readv_pos; pub const sem_id = haiku.sem_id; pub const status_t = haiku.status_t; pub const system_info = haiku.system_info; pub const team_id = haiku.team_id; -pub const team_info = haiku.team_info; pub const thread_id = haiku.thread_id; +pub const writev_pos = haiku.writev_pos; pub const AUTH = openbsd.AUTH; pub const BI = openbsd.BI; diff --git a/lib/std/c/haiku.zig b/lib/std/c/haiku.zig index dd599ca83735d3c470859cd5c59c73a167983e27..768935574d2912e79ea21f5bf1b4cd1f6f80b800 100644 --- a/lib/std/c/haiku.zig +++ b/lib/std/c/haiku.zig @@ -1,15 +1,8 @@ const std = @import("../std.zig"); -const assert = std.debug.assert; const builtin = @import("builtin"); -const maxInt = std.math.maxInt; -const iovec = std.posix.iovec; -const iovec_const = std.posix.iovec_const; -const socklen_t = std.c.socklen_t; +const assert = std.debug.assert; const fd_t = std.c.fd_t; const off_t = std.c.off_t; -const PATH_MAX = std.c.PATH_MAX; -const uid_t = std.c.uid_t; -const gid_t = std.c.gid_t; const dev_t = std.c.dev_t; const ino_t = std.c.ino_t; @@ -17,53 +10,21 @@ comptime { assert(builtin.os.tag == .haiku); // Prevent access of std.c symbols on wrong OS. } -pub extern "root" fn _errnop() *i32; -pub extern "root" fn find_directory(which: directory_which, volume: i32, createIt: bool, path_ptr: [*]u8, length: i32) u64; -pub extern "root" fn find_thread(thread_name: ?*anyopaque) i32; -pub extern "root" fn get_system_info(system_info: *system_info) usize; -pub extern "root" fn _get_team_info(team: i32, team_info: *team_info, size: usize) i32; -pub extern "root" fn _get_next_area_info(team: i32, cookie: *i64, area_info: *area_info, size: usize) i32; -pub extern "root" fn _get_next_image_info(team: i32, cookie: *i32, image_info: *image_info, size: usize) i32; -pub extern "root" fn _kern_get_current_team() team_id; +pub const B_OS_NAME_LENGTH = 32; + pub extern "root" fn _kern_open_dir(fd: fd_t, path: [*:0]const u8) fd_t; pub extern "root" fn _kern_read_dir(fd: fd_t, buffer: [*]u8, bufferSize: usize, maxCount: u32) isize; pub extern "root" fn _kern_rewind_dir(fd: fd_t) status_t; pub extern "root" fn _kern_read_stat(fd: fd_t, path: [*:0]const u8, traverseLink: bool, stat: *std.c.Stat, statSize: usize) status_t; + +pub extern "root" fn find_thread(name: ?[*:0]const u8) thread_id; +pub extern "root" fn get_system_info(info: *system_info) status_t; + +pub extern "root" fn _errnop() *i32; + pub extern "root" fn readv_pos(fd: fd_t, pos: off_t, vec: [*]const std.c.iovec, count: i32) isize; pub extern "root" fn writev_pos(fd: fd_t, pos: off_t, vec: [*]const std.c.iovec_const, count: i32) isize; -pub const area_info = extern struct { - area: u32, - name: [32]u8, - size: usize, - lock: u32, - protection: u32, - team_id: i32, - ram_size: u32, - copy_count: u32, - in_count: u32, - out_count: u32, - address: *anyopaque, -}; - -pub const image_info = extern struct { - id: u32, - image_type: u32, - sequence: i32, - init_order: i32, - init_routine: *anyopaque, - term_routine: *anyopaque, - device: i32, - node: i64, - name: [PATH_MAX]u8, - text: *anyopaque, - data: *anyopaque, - text_size: i32, - data_size: i32, - api_version: i32, - abi: i32, -}; - pub const system_info = extern struct { boot_time: i64, cpu_count: u32, @@ -86,31 +47,12 @@ pub const system_info = extern struct { max_teams: u32, used_teams: u32, kernel_name: [256]u8, - kernel_build_date: [32]u8, - kernel_build_time: [32]u8, + kernel_build_date: [B_OS_NAME_LENGTH]u8, + kernel_build_time: [B_OS_NAME_LENGTH]u8, kernel_version: i64, abi: u32, }; -pub const team_info = extern struct { - team_id: i32, - thread_count: i32, - image_count: i32, - area_count: i32, - debugger_nub_thread: i32, - debugger_nub_port: i32, - argc: i32, - args: [64]u8, - uid: uid_t, - gid: gid_t, -}; - -pub const directory_which = enum(i32) { - B_USER_SETTINGS_DIRECTORY = 0xbbe, - - _, -}; - pub const area_id = i32; pub const port_id = i32; pub const sem_id = i32;