aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-12 16:32:49 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-12 16:32:49 -0800
commitb06e520ae4db1e6ffbd50b6ed0d35df90347d0ac (patch)
treeb34a64599f839c9e7d4c6fcee214d3db99933b96
parentf33d23c0b4c74fe2fe89d9268f7c66b5b25c1bab (diff)
downloadbun-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.zig6
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,