diff --git a/src/linux_c.zig b/src/linux_c.zig index bc7c1917f1..601b77ac4e 100644 --- a/src/linux_c.zig +++ b/src/linux_c.zig @@ -676,3 +676,4 @@ pub const RENAME_EXCHANGE = 1 << 1; pub const RENAME_WHITEOUT = 1 << 2; pub extern "C" fn quick_exit(code: c_int) noreturn; +pub extern "C" fn memrchr(ptr: [*]const u8, val: c_int, len: usize) ?[*]const u8; diff --git a/src/string_immutable.zig b/src/string_immutable.zig index e36a9a0e32..3cb523a902 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -272,6 +272,14 @@ pub fn indexOfSigned(self: string, str: string) i32 { } pub inline fn lastIndexOfChar(self: []const u8, char: u8) ?usize { + if (comptime Environment.isLinux) { + if (@inComptime()) { + return lastIndexOfCharT(u8, self, char); + } + const start = bun.C.memrchr(self.ptr, char, self.len) orelse return null; + const i = @intFromPtr(start) - @intFromPtr(self.ptr); + return @intCast(i); + } return lastIndexOfCharT(u8, self, char); }