diff options
author | 2021-11-20 20:19:07 -0800 | |
---|---|---|
committer | 2021-12-16 19:18:51 -0800 | |
commit | c536370ab819a80a9a2f0b54b44e43178edb67ce (patch) | |
tree | 1c8b4c6daaf00eb9b1d5ab263bc4e46cdf92abd1 /misctools | |
parent | dccc6bf1afc2047a912162020c4c6858a51344af (diff) | |
download | bun-c536370ab819a80a9a2f0b54b44e43178edb67ce.tar.gz bun-c536370ab819a80a9a2f0b54b44e43178edb67ce.tar.zst bun-c536370ab819a80a9a2f0b54b44e43178edb67ce.zip |
[internal] readlink
Diffstat (limited to 'misctools')
-rw-r--r-- | misctools/readlink-getfd.zig | 56 | ||||
-rw-r--r-- | misctools/readlink-realpath.zig | 31 |
2 files changed, 62 insertions, 25 deletions
diff --git a/misctools/readlink-getfd.zig b/misctools/readlink-getfd.zig index a267e0cd8..cd97cb2d0 100644 --- a/misctools/readlink-getfd.zig +++ b/misctools/readlink-getfd.zig @@ -19,32 +19,38 @@ pub fn main() anyerror!void { const to_resolve = args[args.len - 1]; const cwd = try std.process.getCwdAlloc(allocator); - var parts = [1][]const u8{std.mem.span(to_resolve)}; - var joined_buf: [std.fs.MAX_PATH_BYTES]u8 = undefined; - var joined = path_handler.joinAbsStringBuf( - cwd, - &joined_buf, - &parts, - .loose, - ); - joined_buf[joined.len] = 0; - const joined_z: [:0]const u8 = joined_buf[0..joined.len :0]; - - var file = std.fs.openFileAbsoluteZ(joined_z, .{ .read = false }) catch |err| { - switch (err) { - error.NotDir, error.FileNotFound => { - Output.prettyError("<r><red>404 Not Found<r>: <b>\"{s}\"<r>", .{joined_z}); - Output.flush(); - std.process.exit(1); - }, - else => { - return err; - }, - } - }; - + var path: []u8 = undefined; var out_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; - var path = try std.os.getFdPath(file.handle, &out_buffer); + + var j: usize = 0; + while (j < 100000) : (j += 1) { + var parts = [1][]const u8{std.mem.span(to_resolve)}; + var joined_buf: [std.fs.MAX_PATH_BYTES]u8 = undefined; + var joined = path_handler.joinAbsStringBuf( + cwd, + &joined_buf, + &parts, + .loose, + ); + joined_buf[joined.len] = 0; + const joined_z: [:0]const u8 = joined_buf[0..joined.len :0]; + + var file = std.fs.openFileAbsoluteZ(joined_z, .{ .read = false }) catch |err| { + switch (err) { + error.NotDir, error.FileNotFound => { + Output.prettyError("<r><red>404 Not Found<r>: <b>\"{s}\"<r>", .{joined_z}); + Output.flush(); + std.process.exit(1); + }, + else => { + return err; + }, + } + }; + + path = try std.os.getFdPath(file.handle, &out_buffer); + file.close(); + } Output.print("{s}", .{path}); } diff --git a/misctools/readlink-realpath.zig b/misctools/readlink-realpath.zig new file mode 100644 index 000000000..ed7fd14cf --- /dev/null +++ b/misctools/readlink-realpath.zig @@ -0,0 +1,31 @@ +const std = @import("std"); + +const path_handler = @import("../src/resolver/resolve_path.zig"); +usingnamespace @import("../src/global.zig"); + +// zig build-exe -Drelease-fast --main-pkg-path ../ ./readlink-getfd.zig +pub fn main() anyerror!void { + var stdout_ = std.io.getStdOut(); + var stderr_ = std.io.getStdErr(); + var output_source = Output.Source.init(stdout_, stderr_); + Output.Source.set(&output_source); + defer Output.flush(); + + var args_buffer: [8096 * 2]u8 = undefined; + var fixed_buffer = std.heap.FixedBufferAllocator.init(&args_buffer); + var allocator = &fixed_buffer.allocator; + + var args = std.mem.span(try std.process.argsAlloc(allocator)); + + const to_resolve = args[args.len - 1]; + const cwd = try std.process.getCwdAlloc(allocator); + var out_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; + var path: []u8 = undefined; + + var j: usize = 0; + while (j < 100000) : (j += 1) { + path = try std.os.realpathZ(to_resolve, &out_buffer); + } + + Output.print("{s}", .{path}); +} |