| author | |
| committer | |
| log | 6fbe42de92ac1012d8b53d42f94b26865c2a18f1 |
| tree | 57ada0adfe22b8f602e7c3c352c6f9dbb50ccdf1 |
| parent | a86ee7d90f6e802c01901d9e41e2c3617f7820a5 |
| signature |
Similar to strlen, LLVM 23+ will sometimes emit libcalls to this function even
when libc isn't linked.3 files changed, 8 insertions(+), 6 deletions(-)
lib/c/wchar.zig+1-6| ... | @@ -14,7 +14,6 @@ comptime { | ... | @@ -14,7 +14,6 @@ comptime { |
| 14 | symbol(&wmemcpy, "wmemcpy"); | 14 | symbol(&wmemcpy, "wmemcpy"); |
| 15 | symbol(&wmemmove, "wmemmove"); | 15 | symbol(&wmemmove, "wmemmove"); |
| 16 | symbol(&wmemset, "wmemset"); | 16 | symbol(&wmemset, "wmemset"); |
| 17 | symbol(&wcslen, "wcslen"); | ||
| 18 | symbol(&wcsnlen, "wcsnlen"); | 17 | symbol(&wcsnlen, "wcsnlen"); |
| 19 | symbol(&wcscmp, "wcscmp"); | 18 | symbol(&wcscmp, "wcscmp"); |
| 20 | symbol(&wcsncmp, "wcsncmp"); | 19 | symbol(&wcsncmp, "wcsncmp"); |
| ... | @@ -78,10 +77,6 @@ fn wmemset(dest: [*]wchar_t, elem: wchar_t, len: usize) callconv(.c) [*]wchar_t | ... | @@ -78,10 +77,6 @@ fn wmemset(dest: [*]wchar_t, elem: wchar_t, len: usize) callconv(.c) [*]wchar_t |
| 78 | return dest; | 77 | return dest; |
| 79 | } | 78 | } |
| 80 | 79 | ||
| 81 | fn wcslen(str: [*:0]const wchar_t) callconv(.c) usize { | ||
| 82 | return wcsnlen(str, std.math.maxInt(usize)); | ||
| 83 | } | ||
| 84 | |||
| 85 | fn wcsnlen(str: [*:0]const wchar_t, max: usize) callconv(.c) usize { | 80 | fn wcsnlen(str: [*:0]const wchar_t, max: usize) callconv(.c) usize { |
| 86 | return std.mem.findScalar(wchar_t, str[0..max], 0) orelse max; | 81 | return std.mem.findScalar(wchar_t, str[0..max], 0) orelse max; |
| 87 | } | 82 | } |
| ... | @@ -193,7 +188,7 @@ fn wcswcs(noalias haystack: [*:0]const wchar_t, noalias needle: [*:0]const wchar | ... | @@ -193,7 +188,7 @@ fn wcswcs(noalias haystack: [*:0]const wchar_t, noalias needle: [*:0]const wchar |
| 193 | } | 188 | } |
| 194 | 189 | ||
| 195 | fn wcsdup(str: [*:0]const wchar_t) callconv(.c) ?[*:0]wchar_t { | 190 | fn wcsdup(str: [*:0]const wchar_t) callconv(.c) ?[*:0]wchar_t { |
| 196 | const len = wcslen(str); | 191 | const len = c.wcslen(str); |
| 197 | const size = (len + 1) * @sizeOf(wchar_t); | 192 | const size = (len + 1) * @sizeOf(wchar_t); |
| 198 | const d_opaque = c.malloc(size) orelse return null; | 193 | const d_opaque = c.malloc(size) orelse return null; |
| 199 | const d: [*]wchar_t = @ptrCast(@alignCast(d_opaque)); | 194 | const d: [*]wchar_t = @ptrCast(@alignCast(d_opaque)); |
lib/compiler_rt.zig+5| ... | @@ -174,6 +174,7 @@ comptime { | ... | @@ -174,6 +174,7 @@ comptime { |
| 174 | symbol(&bcmp, "bcmp"); | 174 | symbol(&bcmp, "bcmp"); |
| 175 | _ = @import("compiler_rt/ssp.zig"); | 175 | _ = @import("compiler_rt/ssp.zig"); |
| 176 | symbol(&strlen, "strlen"); | 176 | symbol(&strlen, "strlen"); |
| 177 | symbol(&wcslen, "wcslen"); | ||
| 177 | } | 178 | } |
| 178 | 179 | ||
| 179 | // Temporarily used for uefi until https://github.com/ziglang/zig/issues/21630 is addressed. | 180 | // 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 { | ... | @@ -188,6 +189,10 @@ fn strlen(s: [*:0]const c_char) callconv(.c) usize { |
| 188 | return std.mem.len(s); | 189 | return std.mem.len(s); |
| 189 | } | 190 | } |
| 190 | 191 | ||
| 192 | fn wcslen(s: [*:0]const std.c.wchar_t) callconv(.c) usize { | ||
| 193 | return std.mem.len(s); | ||
| 194 | } | ||
| 195 | |||
| 191 | fn memcmp(vl: [*]const u8, vr: [*]const u8, n: usize) callconv(.c) c_int { | 196 | fn memcmp(vl: [*]const u8, vr: [*]const u8, n: usize) callconv(.c) c_int { |
| 192 | var i: usize = 0; | 197 | var i: usize = 0; |
| 193 | while (i < n) : (i += 1) { | 198 | while (i < n) : (i += 1) { |
lib/std/c.zig+2| ... | @@ -11205,6 +11205,8 @@ pub extern "c" fn div(a: c_int, b: c_int) div_t; | ... | @@ -11205,6 +11205,8 @@ pub extern "c" fn div(a: c_int, b: c_int) div_t; |
| 11205 | pub extern "c" fn ldiv(a: c_long, b: c_long) ldiv_t; | 11205 | pub extern "c" fn ldiv(a: c_long, b: c_long) ldiv_t; |
| 11206 | pub extern "c" fn lldiv(a: c_longlong, b: c_longlong) lldiv_t; | 11206 | pub extern "c" fn lldiv(a: c_longlong, b: c_longlong) lldiv_t; |
| 11207 | 11207 | ||
| 11208 | pub extern "c" fn wcslen(s: [*:0]const wchar_t) usize; | ||
| 11209 | |||
| 11208 | pub extern "c" fn atoi(str: [*:0]const c_char) c_int; | 11210 | pub extern "c" fn atoi(str: [*:0]const c_char) c_int; |
| 11209 | pub extern "c" fn atol(str: [*:0]const c_char) c_long; | 11211 | pub extern "c" fn atol(str: [*:0]const c_char) c_long; |
| 11210 | pub extern "c" fn atoll(str: [*:0]const c_char) c_longlong; | 11212 | pub extern "c" fn atoll(str: [*:0]const c_char) c_longlong; |