mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
haiku: minor fixups
* no isHaiku() function since there is not more than one os tag that this applies to. * clean up some control flow into a switch * add some TODO comments to investigate panics that suspiciously look like they should be compile errors (see #363)
This commit is contained in:
parent
96a08c1698
commit
37a1d08de2
@ -487,38 +487,42 @@ pub const CpuCountError = error{
|
||||
};
|
||||
|
||||
pub fn cpuCount() CpuCountError!usize {
|
||||
if (std.Target.current.os.tag == .linux) {
|
||||
const cpu_set = try os.sched_getaffinity(0);
|
||||
return @as(usize, os.CPU_COUNT(cpu_set)); // TODO should not need this usize cast
|
||||
switch (std.Target.current.os.tag) {
|
||||
.linux => {
|
||||
const cpu_set = try os.sched_getaffinity(0);
|
||||
return @as(usize, os.CPU_COUNT(cpu_set)); // TODO should not need this usize cast
|
||||
},
|
||||
.windows => {
|
||||
return os.windows.peb().NumberOfProcessors;
|
||||
},
|
||||
.openbsd => {
|
||||
var count: c_int = undefined;
|
||||
var count_size: usize = @sizeOf(c_int);
|
||||
const mib = [_]c_int{ os.CTL_HW, os.HW_NCPUONLINE };
|
||||
os.sysctl(&mib, &count, &count_size, null, 0) catch |err| switch (err) {
|
||||
error.NameTooLong, error.UnknownName => unreachable,
|
||||
else => |e| return e,
|
||||
};
|
||||
return @intCast(usize, count);
|
||||
},
|
||||
.haiku => {
|
||||
var count: u32 = undefined;
|
||||
var system_info: os.system_info = undefined;
|
||||
const rc = os.system.get_system_info(&system_info);
|
||||
count = system_info.cpu_count;
|
||||
return @intCast(usize, count);
|
||||
},
|
||||
else => {
|
||||
var count: c_int = undefined;
|
||||
var count_len: usize = @sizeOf(c_int);
|
||||
const name = if (comptime std.Target.current.isDarwin()) "hw.logicalcpu" else "hw.ncpu";
|
||||
os.sysctlbynameZ(name, &count, &count_len, null, 0) catch |err| switch (err) {
|
||||
error.NameTooLong, error.UnknownName => unreachable,
|
||||
else => |e| return e,
|
||||
};
|
||||
return @intCast(usize, count);
|
||||
},
|
||||
}
|
||||
if (std.Target.current.os.tag == .windows) {
|
||||
return os.windows.peb().NumberOfProcessors;
|
||||
}
|
||||
if (std.Target.current.os.tag == .openbsd) {
|
||||
var count: c_int = undefined;
|
||||
var count_size: usize = @sizeOf(c_int);
|
||||
const mib = [_]c_int{ os.CTL_HW, os.HW_NCPUONLINE };
|
||||
os.sysctl(&mib, &count, &count_size, null, 0) catch |err| switch (err) {
|
||||
error.NameTooLong, error.UnknownName => unreachable,
|
||||
else => |e| return e,
|
||||
};
|
||||
return @intCast(usize, count);
|
||||
}
|
||||
if (std.Target.current.os.tag == .haiku) {
|
||||
var count: u32 = undefined;
|
||||
var system_info: os.system_info = undefined;
|
||||
const rc = os.system.get_system_info(&system_info);
|
||||
count = system_info.cpu_count;
|
||||
return @intCast(usize, count);
|
||||
}
|
||||
var count: c_int = undefined;
|
||||
var count_len: usize = @sizeOf(c_int);
|
||||
const name = if (comptime std.Target.current.isDarwin()) "hw.logicalcpu" else "hw.ncpu";
|
||||
os.sysctlbynameZ(name, &count, &count_len, null, 0) catch |err| switch (err) {
|
||||
error.NameTooLong, error.UnknownName => unreachable,
|
||||
else => |e| return e,
|
||||
};
|
||||
return @intCast(usize, count);
|
||||
}
|
||||
|
||||
pub fn getCurrentThreadId() u64 {
|
||||
|
||||
@ -3892,7 +3892,7 @@ pub fn pipe2(flags: u32) PipeError![2]fd_t {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (comptime std.Target.current.isHaiku()) {
|
||||
if (std.Target.current.os.tag == .haiku) {
|
||||
var fds: [2]fd_t = try pipe();
|
||||
if (flags == 0) return fds;
|
||||
errdefer {
|
||||
@ -3939,10 +3939,10 @@ pub fn sysctl(
|
||||
newlen: usize,
|
||||
) SysCtlError!void {
|
||||
if (builtin.os.tag == .wasi) {
|
||||
@panic("unsupported");
|
||||
@panic("unsupported"); // TODO should be compile error, not panic
|
||||
}
|
||||
if (builtin.os.tag == .haiku) {
|
||||
@panic("unsupported");
|
||||
@panic("unsupported"); // TODO should be compile error, not panic
|
||||
}
|
||||
|
||||
const name_len = math.cast(c_uint, name.len) catch return error.NameTooLong;
|
||||
@ -3966,10 +3966,10 @@ pub fn sysctlbynameZ(
|
||||
newlen: usize,
|
||||
) SysCtlError!void {
|
||||
if (builtin.os.tag == .wasi) {
|
||||
@panic("unsupported");
|
||||
@panic("unsupported"); // TODO should be compile error, not panic
|
||||
}
|
||||
if (builtin.os.tag == .haiku) {
|
||||
@panic("unsupported");
|
||||
@panic("unsupported"); // TODO should be compile error, not panic
|
||||
}
|
||||
|
||||
switch (errno(system.sysctlbyname(name, oldp, oldlenp, newp, newlen))) {
|
||||
|
||||
@ -1339,10 +1339,6 @@ pub const Target = struct {
|
||||
return self.os.tag.isDarwin();
|
||||
}
|
||||
|
||||
pub fn isHaiku(self: Target) bool {
|
||||
return self.os.tag == .haiku;
|
||||
}
|
||||
|
||||
pub fn isGnuLibC_os_tag_abi(os_tag: Os.Tag, abi: Abi) bool {
|
||||
return os_tag == .linux and abi.isGnu();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user