diff options
author | 2022-02-12 16:32:49 -0800 | |
---|---|---|
committer | 2022-02-12 16:32:49 -0800 | |
commit | b06e520ae4db1e6ffbd50b6ed0d35df90347d0ac (patch) | |
tree | b34a64599f839c9e7d4c6fcee214d3db99933b96 | |
parent | f33d23c0b4c74fe2fe89d9268f7c66b5b25c1bab (diff) | |
download | bun-b06e520ae4db1e6ffbd50b6ed0d35df90347d0ac.tar.gz bun-b06e520ae4db1e6ffbd50b6ed0d35df90347d0ac.tar.zst bun-b06e520ae4db1e6ffbd50b6ed0d35df90347d0ac.zip |
[bun install] Handle multiple files in directory bins to link
-rw-r--r-- | src/install/bin.zig | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/install/bin.zig b/src/install/bin.zig index 2d4c09c0a..fa44a87bd 100644 --- a/src/install/bin.zig +++ b/src/install/bin.zig @@ -444,19 +444,21 @@ pub const Bin = extern struct { }; target_buf[basedir_path.len] = std.fs.path.sep; var target_buf_remain = target_buf[basedir_path.len + 1 ..]; + var prev_target_buf_remain = target_buf_remain; while (iter.next() catch null) |entry_| { const entry: std.fs.Dir.Entry = entry_; switch (entry.kind) { std.fs.Dir.Entry.Kind.SymLink, std.fs.Dir.Entry.Kind.File => { + target_buf_remain = prev_target_buf_remain; std.mem.copy(u8, target_buf_remain, entry.name); target_buf_remain = target_buf_remain[entry.name.len..]; target_buf_remain[0] = 0; var from_path: [:0]u8 = target_buf[0 .. @ptrToInt(target_buf_remain.ptr) - @ptrToInt(&target_buf) :0]; var to_path = if (!link_global) - std.fmt.bufPrintZ(&dest_buf, ".bin/{s}", .{entry.name}) catch unreachable + std.fmt.bufPrintZ(&dest_buf, ".bin/{s}", .{entry.name}) catch continue else - std.fmt.bufPrintZ(&dest_buf, "{s}", .{entry.name}) catch unreachable; + std.fmt.bufPrintZ(&dest_buf, "{s}", .{entry.name}) catch continue; std.os.symlinkatZ( from_path, |