From 7e8c7e56964f8d9d20be04e314324f84f9db6146 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 6 Jan 2026 20:44:59 -0800 Subject: [PATCH] std.Io: fix AT_SYMLINK_FOLLOW flags hard linking has the backwards default, which uses a different flag --- lib/std/Io/File.zig | 2 +- lib/std/Io/Threaded.zig | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/std/Io/File.zig b/lib/std/Io/File.zig index cf8ca4e6380823b846f5551625642b81dc977419..27833d4d8a5bada35d695b50c25abeac2f54c446 100644 --- a/lib/std/Io/File.zig +++ b/lib/std/Io/File.zig @@ -709,7 +709,7 @@ pub fn realPath(file: File, io: Io, out_buffer: []u8) RealPathError!usize { } pub const HardLinkOptions = struct { - follow_symlinks: bool = true, + follow_symlinks: bool = false, }; pub const HardLinkError = error{ diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index b8fcbfb70c07a338b072d2ffd0ee913aecd20bff..fa5d425ebc3e2702f95e440a00af4642aa1a5e9e 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -5249,8 +5249,8 @@ fn fileHardLink( var new_path_buffer: [posix.PATH_MAX]u8 = undefined; const new_sub_path_posix = try pathToPosix(new_sub_path, &new_path_buffer); - const flags: u32 = if (!options.follow_symlinks) - posix.AT.SYMLINK_NOFOLLOW | posix.AT.EMPTY_PATH + const flags: u32 = if (options.follow_symlinks) + posix.AT.SYMLINK_FOLLOW | posix.AT.EMPTY_PATH else posix.AT.EMPTY_PATH; @@ -7829,7 +7829,7 @@ fn dirHardLink( const old_sub_path_posix = try pathToPosix(old_sub_path, &old_path_buffer); const new_sub_path_posix = try pathToPosix(new_sub_path, &new_path_buffer); - const flags: u32 = if (!options.follow_symlinks) posix.AT.SYMLINK_NOFOLLOW else 0; + const flags: u32 = if (options.follow_symlinks) posix.AT.SYMLINK_FOLLOW else 0; return linkat(old_dir.handle, old_sub_path_posix, new_dir.handle, new_sub_path_posix, flags); } -- 2.54.0