diff options
author | 2023-07-27 03:34:18 -0700 | |
---|---|---|
committer | 2023-07-27 03:34:18 -0700 | |
commit | d7aebc2222daa293dc41c4fb9e230f1848cea3ad (patch) | |
tree | 58503c317057c77103cc0325f0082d6f1c9c6923 /src | |
parent | dc0d767f27ca9528f7589e79bf89a65000935b40 (diff) | |
download | bun-d7aebc2222daa293dc41c4fb9e230f1848cea3ad.tar.gz bun-d7aebc2222daa293dc41c4fb9e230f1848cea3ad.tar.zst bun-d7aebc2222daa293dc41c4fb9e230f1848cea3ad.zip |
Remove lstat call in fs.watch (#3836)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/node/node_fs_watcher.zig | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/src/bun.js/node/node_fs_watcher.zig b/src/bun.js/node/node_fs_watcher.zig index 3144f4f6b..72d9861c0 100644 --- a/src/bun.js/node/node_fs_watcher.zig +++ b/src/bun.js/node/node_fs_watcher.zig @@ -589,34 +589,30 @@ pub const FSWatcher = struct { is_file: bool = true, }; + // TODO: switch to using JSC.Maybe to avoid using "unreachable" and improve error messages fn fdFromAbsolutePathZ( absolute_path_z: [:0]const u8, ) !PathResult { - var stat = try bun.C.lstat_absolute(absolute_path_z); - var result = PathResult{}; - - switch (stat.kind) { - .sym_link => { + if (std.fs.openIterableDirAbsoluteZ(absolute_path_z, .{ + .access_sub_paths = true, + })) |iterable_dir| { + return PathResult{ + .fd = iterable_dir.dir.fd, + .is_file = false, + }; + } else |err| { + if (err == error.NotDir) { var file = try std.fs.openFileAbsoluteZ(absolute_path_z, .{ .mode = .read_only }); - result.fd = file.handle; - const _stat = try file.stat(); - - result.is_file = _stat.kind != .directory; - }, - .directory => { - const dir = (try std.fs.openIterableDirAbsoluteZ(absolute_path_z, .{ - .access_sub_paths = true, - })).dir; - result.fd = dir.fd; - result.is_file = false; - }, - else => { - const file = try std.fs.openFileAbsoluteZ(absolute_path_z, .{ .mode = .read_only }); - result.fd = file.handle; - result.is_file = true; - }, + return PathResult{ + .fd = file.handle, + .is_file = true, + }; + } else { + return err; + } } - return result; + + unreachable; } pub fn init(args: Arguments) !*FSWatcher { |