diff --git a/lib/c/wchar.zig b/lib/c/wchar.zig index 24aca6b0c869d4900cd4724160c760a8bcfc98cb..a4d7e427a2e20a4b9b6d5aef2c45372a65f816be 100644 --- a/lib/c/wchar.zig +++ b/lib/c/wchar.zig @@ -14,7 +14,6 @@ comptime { symbol(&wmemcpy, "wmemcpy"); symbol(&wmemmove, "wmemmove"); symbol(&wmemset, "wmemset"); - symbol(&wcslen, "wcslen"); symbol(&wcsnlen, "wcsnlen"); symbol(&wcscmp, "wcscmp"); symbol(&wcsncmp, "wcsncmp"); @@ -78,10 +77,6 @@ fn wmemset(dest: [*]wchar_t, elem: wchar_t, len: usize) callconv(.c) [*]wchar_t return dest; } -fn wcslen(str: [*:0]const wchar_t) callconv(.c) usize { - return wcsnlen(str, std.math.maxInt(usize)); -} - fn wcsnlen(str: [*:0]const wchar_t, max: usize) callconv(.c) usize { return std.mem.findScalar(wchar_t, str[0..max], 0) orelse max; } @@ -193,7 +188,7 @@ fn wcswcs(noalias haystack: [*:0]const wchar_t, noalias needle: [*:0]const wchar } fn wcsdup(str: [*:0]const wchar_t) callconv(.c) ?[*:0]wchar_t { - const len = wcslen(str); + const len = c.wcslen(str); const size = (len + 1) * @sizeOf(wchar_t); const d_opaque = c.malloc(size) orelse return null; const d: [*]wchar_t = @ptrCast(@alignCast(d_opaque)); diff --git a/lib/compiler_rt.zig b/lib/compiler_rt.zig index e5cffd9d7e50b7cd35dbc94c49ead55d663fb873..c10141d6bac144d3b2ad4bef17298c963769f7b3 100644 --- a/lib/compiler_rt.zig +++ b/lib/compiler_rt.zig @@ -174,6 +174,7 @@ comptime { symbol(&bcmp, "bcmp"); _ = @import("compiler_rt/ssp.zig"); symbol(&strlen, "strlen"); + symbol(&wcslen, "wcslen"); } // Temporarily used for uefi until https://github.com/ziglang/zig/issues/21630 is addressed. @@ -188,6 +189,10 @@ fn strlen(s: [*:0]const c_char) callconv(.c) usize { return std.mem.len(s); } +fn wcslen(s: [*:0]const std.c.wchar_t) callconv(.c) usize { + return std.mem.len(s); +} + fn memcmp(vl: [*]const u8, vr: [*]const u8, n: usize) callconv(.c) c_int { var i: usize = 0; while (i < n) : (i += 1) { diff --git a/lib/std/c.zig b/lib/std/c.zig index e3625edb869186614eb961174748f5fcab77f5b4..a4c5aa9e5ea5d6a46332b34cc4759497b48c637f 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -11214,6 +11214,8 @@ pub extern "c" fn div(a: c_int, b: c_int) div_t; pub extern "c" fn ldiv(a: c_long, b: c_long) ldiv_t; pub extern "c" fn lldiv(a: c_longlong, b: c_longlong) lldiv_t; +pub extern "c" fn wcslen(s: [*:0]const wchar_t) usize; + pub extern "c" fn atoi(str: [*:0]const c_char) c_int; pub extern "c" fn atol(str: [*:0]const c_char) c_long; pub extern "c" fn atoll(str: [*:0]const c_char) c_longlong;