zig/lib/c/sys/utsname.zig
Andrew Kelley a2ea36a517 zig libc: modify errno helper to eliminate @intCast
The vast majority of libc functions return `c_int` for the return value,
when setting errno. This utility function is for those cases.

Other cases can hand-roll the logic, or additional helpers can be added.
2026-01-24 20:18:18 +01:00

32 lines
1.1 KiB
Zig

const std = @import("std");
const common = @import("../common.zig");
const builtin = @import("builtin");
comptime {
if (builtin.target.isMuslLibC()) {
@export(&unameLinux, .{ .name = "uname", .linkage = common.linkage, .visibility = common.visibility });
}
if (builtin.target.isWasiLibC()) {
@export(&unameWasi, .{ .name = "uname", .linkage = common.linkage, .visibility = common.visibility });
}
}
fn unameLinux(uts: *std.os.linux.utsname) callconv(.c) c_int {
return common.errno(std.os.linux.uname(uts));
}
fn unameWasi(uts: *std.c.utsname) callconv(.c) c_int {
// note the @bitCast's for NUL termination!
uts.sysname[0..5].* = @bitCast("wasi".*);
uts.nodename[0..7].* = @bitCast("(none)".*);
uts.release[0..6].* = @bitCast("0.0.0".*);
uts.version[0..6].* = @bitCast("0.0.0".*);
uts.machine[0..7].* = @bitCast(switch (builtin.target.cpu.arch) {
.wasm32 => "wasm32",
.wasm64 => "wasm64",
else => comptime unreachable,
}.*);
uts.domainname[0..7].* = @bitCast("(none)".*);
return 0;
}