aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-27 03:34:18 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-27 03:34:18 -0700
commitd7aebc2222daa293dc41c4fb9e230f1848cea3ad (patch)
tree58503c317057c77103cc0325f0082d6f1c9c6923 /src
parentdc0d767f27ca9528f7589e79bf89a65000935b40 (diff)
downloadbun-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.zig42
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 {