diff --git a/zigup.zig b/zigup.zig index d759be1..42edbfa 100644 --- a/zigup.zig +++ b/zigup.zig @@ -729,6 +729,9 @@ fn verifyPathLink(allocator: Allocator, path_link: []const u8) !void { while (path_it.next()) |path| { switch (try compareDir(path_link_dir_id, path)) { .missing => continue, + // can't be the same directory because we were able to open and get + // the file id for path_link_dir_id + .access_denied => continue, .match => return, .mismatch => {}, } @@ -755,6 +758,9 @@ fn verifyPathLink(allocator: Allocator, path_link: []const u8) !void { while (path_it.next()) |path| { switch (try compareDir(path_link_dir_id, path)) { .missing => continue, + // can't be the same directory because we were able to open and get + // the file id for path_link_dir_id + .access_denied => continue, .match => return, .mismatch => {}, } @@ -768,9 +774,10 @@ fn verifyPathLink(allocator: Allocator, path_link: []const u8) !void { return error.AlreadyReported; } -fn compareDir(dir_id: FileId, other_dir: []const u8) !enum { missing, match, mismatch } { +fn compareDir(dir_id: FileId, other_dir: []const u8) !enum { missing, access_denied, match, mismatch } { var dir = std.fs.cwd().openDir(other_dir, .{}) catch |err| switch (err) { error.FileNotFound, error.NotDir, error.BadPathName => return .missing, + error.AccessDenied => return .access_denied, else => |e| return e, }; defer dir.close();