From 5b09384f0126f4270109bcee72bc63e70be2596d Mon Sep 17 00:00:00 2001 From: Dylan Conway <35280289+dylan-conway@users.noreply.github.com> Date: Thu, 6 Jun 2024 22:01:28 -0700 Subject: [PATCH] add `memrchr` to `strings.lastIndexOfChar` on linux (#11671) --- src/linux_c.zig | 1 + src/string_immutable.zig | 8 ++++++++ 2 files changed, 9 insertions(+) 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); }