aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 {