Commit 482343f2e2

Andrew Kelley <andrew@ziglang.org>
2025-10-20 05:48:24
std.Io.Threaded: implement dirStatPath for Windows
1 parent f98352e
Changed files (2)
lib
lib/std/fs/Dir.zig
@@ -2332,11 +2332,6 @@ pub const StatFileError = File.OpenError || File.StatError || posix.FStatAtError
 
 /// Deprecated in favor of `Io.Dir.statPath`.
 pub fn statFile(self: Dir, sub_path: []const u8) StatFileError!Stat {
-    if (native_os == .windows) {
-        var file = try self.openFile(sub_path, .{});
-        defer file.close();
-        return file.stat();
-    }
     var threaded: Io.Threaded = .init_single_threaded;
     const io = threaded.io();
     return Io.Dir.statPath(.{ .handle = self.fd }, io, sub_path, .{});
lib/std/Io/Threaded.zig
@@ -171,7 +171,7 @@ pub fn io(t: *Threaded) Io {
             .dirStat = dirStat,
             .dirStatPath = switch (builtin.os.tag) {
                 .linux => dirStatPathLinux,
-                .windows => @panic("TODO"),
+                .windows => dirStatPathWindows,
                 .wasi => dirStatPathWasi,
                 else => dirStatPathPosix,
             },
@@ -1079,6 +1079,21 @@ fn dirStatPathPosix(
     }
 }
 
+fn dirStatPathWindows(
+    userdata: ?*anyopaque,
+    dir: Io.Dir,
+    sub_path: []const u8,
+    options: Io.Dir.StatPathOptions,
+) Io.Dir.StatPathError!Io.File.Stat {
+    const t: *Threaded = @ptrCast(@alignCast(userdata));
+    const t_io = t.io();
+    var file = try dir.openFile(t_io, sub_path, .{
+        .follow_symlinks = options.follow_symlinks,
+    });
+    defer file.close(t_io);
+    return file.stat(t_io);
+}
+
 fn dirStatPathWasi(
     userdata: ?*anyopaque,
     dir: Io.Dir,