zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4f652fb4e36c7f2791bb4c7fb1909a897a662c3b (tree)
parent 9d3e9054a7a154730261d5fae96631cc04bdef93
Author: GasInfinity <me@gasinfinity.dev>
Date:   Tue, 20 Jan 2026 23:18:34 +0100

feat(libzigc): use common implementations for `sys/utsname.h`

* and remove their musl/wasi implementation

Diffstat:
Mlib/c.zig | 2++
Alib/c/sys.zig | 3+++
Alib/c/sys/utsname.zig | 40++++++++++++++++++++++++++++++++++++++++
Dlib/libc/musl/src/misc/uname.c | 7-------
Dlib/libc/wasi/libc-top-half/musl/src/misc/uname.c | 32--------------------------------
Msrc/libs/musl.zig | 1-
Msrc/libs/wasi_libc.zig | 1-
7 files changed, 45 insertions(+), 41 deletions(-)

diff --git a/lib/c.zig b/lib/c.zig @@ -25,6 +25,8 @@ comptime { _ = @import("c/strings.zig"); _ = @import("c/wchar.zig"); + _ = @import("c/sys.zig"); + if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) { // Files specific to musl and wasi-libc. } diff --git a/lib/c/sys.zig b/lib/c/sys.zig @@ -0,0 +1,3 @@ +comptime { + _ = @import("sys/utsname.zig"); +} diff --git a/lib/c/sys/utsname.zig b/lib/c/sys/utsname.zig @@ -0,0 +1,40 @@ +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 { + const linux = std.os.linux; + + return switch (linux.errno(linux.uname(uts))) { + .SUCCESS => 0, + else => |err| blk: { + std.c._errno().* = @intFromEnum(err); + break :blk -1; + }, + }; +} + +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; +} diff --git a/lib/libc/musl/src/misc/uname.c b/lib/libc/musl/src/misc/uname.c @@ -1,7 +0,0 @@ -#include <sys/utsname.h> -#include "syscall.h" - -int uname(struct utsname *uts) -{ - return syscall(SYS_uname, uts); -} diff --git a/lib/libc/wasi/libc-top-half/musl/src/misc/uname.c b/lib/libc/wasi/libc-top-half/musl/src/misc/uname.c @@ -1,32 +0,0 @@ -#include <sys/utsname.h> -#ifdef __wasilibc_unmodified_upstream // Implement uname with placeholders -#include "syscall.h" -#else -#include <string.h> -#endif - -int uname(struct utsname *uts) -{ -#ifdef __wasilibc_unmodified_upstream // Implement uname with placeholders - return syscall(SYS_uname, uts); -#else - // Just fill in the fields with placeholder values. - strcpy(uts->sysname, "wasi"); - strcpy(uts->nodename, "(none)"); - strcpy(uts->release, "0.0.0"); - strcpy(uts->version, "0.0.0"); -#if defined(__wasm32__) - strcpy(uts->machine, "wasm32"); -#elif defined(__wasm64__) - strcpy(uts->machine, "wasm64"); -#else - strcpy(uts->machine, "unknown"); -#endif -#ifdef _GNU_SOURCE - strcpy(uts->domainname, "(none)"); -#else - strcpy(uts->__domainname, "(none)"); -#endif - return 0; -#endif -} diff --git a/src/libs/musl.zig b/src/libs/musl.zig @@ -1156,7 +1156,6 @@ const src_files = [_][]const u8{ "musl/src/misc/setrlimit.c", "musl/src/misc/syscall.c", "musl/src/misc/syslog.c", - "musl/src/misc/uname.c", "musl/src/misc/wordexp.c", "musl/src/mman/madvise.c", "musl/src/mman/mincore.c", diff --git a/src/libs/wasi_libc.zig b/src/libs/wasi_libc.zig @@ -1054,7 +1054,6 @@ const libc_top_half_src_files = [_][]const u8{ "wasi/libc-top-half/musl/src/math/sinhf.c", "wasi/libc-top-half/musl/src/misc/fmtmsg.c", "wasi/libc-top-half/musl/src/misc/nftw.c", - "wasi/libc-top-half/musl/src/misc/uname.c", "wasi/libc-top-half/musl/src/prng/random.c", "wasi/libc-top-half/musl/src/regex/glob.c", "wasi/libc-top-half/musl/src/regex/regcomp.c",