aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-03-19 20:58:16 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-03-19 20:58:27 -0700
commit0edd8d262da4409f1e5566c47bfed9b3f23636b7 (patch)
tree35e7e1680cfe57f8cb36b8c673a4ad419a8947cd
parent76622e41d66d8d2bdbb11c9981a4e9506b5a78b6 (diff)
downloadbun-0edd8d262da4409f1e5566c47bfed9b3f23636b7.tar.gz
bun-0edd8d262da4409f1e5566c47bfed9b3f23636b7.tar.zst
bun-0edd8d262da4409f1e5566c47bfed9b3f23636b7.zip
Fix bug with scoped aliased dependencies in bun install on macOS
-rw-r--r--src/c.zig2
-rw-r--r--src/install/install.zig5
-rw-r--r--src/string_immutable.zig12
3 files changed, 16 insertions, 3 deletions
diff --git a/src/c.zig b/src/c.zig
index d6417bad2..3e9193069 100644
--- a/src/c.zig
+++ b/src/c.zig
@@ -42,6 +42,8 @@ pub const lstat = lstat64;
pub const fstat = fstat64;
pub const stat = stat64;
+pub extern "c" fn strchr(str: [*]const u8, char: u8) ?[*]const u8;
+
pub fn lstat_absolute(path: [:0]const u8) !Stat {
if (builtin.os.tag == .windows) {
@compileError("Not implemented yet");
diff --git a/src/install/install.zig b/src/install/install.zig
index 0927c9335..b8509f50a 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -1058,9 +1058,8 @@ const PackageInstall = struct {
fn installWithClonefile(this: *PackageInstall) CloneFileError!Result {
if (comptime !Environment.isMac) @compileError("clonefileat() is macOS only.");
- if (this.package_name[0] == '@') {
- const current = bun.span(this.destination_dir_subpath);
- if (strings.indexOfChar(current, std.fs.path.sep)) |slash| {
+ if (this.destination_dir_subpath[0] == '@') {
+ if (strings.indexOfCharZ(this.destination_dir_subpath, std.fs.path.sep)) |slash| {
this.destination_dir_subpath_buf[slash] = 0;
var subdir = this.destination_dir_subpath_buf[0..slash :0];
this.destination_dir.dir.makeDirZ(subdir) catch {};
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index 8f3859a34..d393577fc 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -3187,6 +3187,18 @@ test "indexOfNeedsEscape" {
try std.testing.expectEqual(out.?, 48);
}
+pub fn indexOfCharZ(sliceZ: [:0]const u8, char: u8) ?u63 {
+ const ptr = bun.C.strchr(sliceZ.ptr, char) orelse return null;
+ const pos = @ptrToInt(ptr) - @ptrToInt(sliceZ.ptr);
+
+ if (comptime Environment.allow_assert)
+ std.debug.assert(@ptrToInt(sliceZ.ptr) >= @ptrToInt(ptr) and
+ @ptrToInt(ptr) < @ptrToInt(sliceZ.ptr + sliceZ.len) and
+ pos <= sliceZ.len);
+
+ return @truncate(u63, pos);
+}
+
pub fn indexOfChar(slice: []const u8, char: u8) ?u32 {
var remaining = slice;
if (remaining.len == 0)