Commit 83e4ff6f4c

Andrew Kelley <andrew@ziglang.org>
2025-10-19 16:08:13
std.Io: add dirClose
1 parent 21e195a
Changed files (4)
lib/std/Io/Dir.zig
@@ -93,6 +93,10 @@ pub fn openDir(dir: Dir, io: Io, sub_path: []const u8, options: OpenOptions) Ope
     return io.vtable.dirOpenDir(io.userdata, dir, sub_path, options);
 }
 
+pub fn close(dir: Dir, io: Io) void {
+    return io.vtable.dirClose(io.userdata, dir);
+}
+
 pub fn openFile(dir: Dir, io: Io, sub_path: []const u8, flags: File.OpenFlags) File.OpenError!File {
     return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
 }
lib/std/Io/net.zig
@@ -1033,9 +1033,8 @@ pub const Socket = struct {
     };
 
     /// Leaves `address` in a valid state.
-    pub fn close(s: *Socket, io: Io) void {
+    pub fn close(s: *const Socket, io: Io) void {
         io.vtable.netClose(io.userdata, s.handle);
-        s.handle = undefined;
     }
 
     pub const SendError = error{
@@ -1163,13 +1162,7 @@ pub const Stream = struct {
 
     const max_iovecs_len = 8;
 
-    pub fn close(s: *Stream, io: Io) void {
-        io.vtable.netClose(io.userdata, s.socket.handle);
-        s.* = undefined;
-    }
-
-    /// Same as `close` but doesn't try to set `Stream` to `undefined`.
-    pub fn closeConst(s: *const Stream, io: Io) void {
+    pub fn close(s: *const Stream, io: Io) void {
         io.vtable.netClose(io.userdata, s.socket.handle);
     }
 
lib/std/Io/Threaded.zig
@@ -203,6 +203,7 @@ pub fn io(t: *Threaded) Io {
                 .wasi => dirOpenDirWasi,
                 else => dirOpenDirPosix,
             },
+            .dirClose = dirClose,
             .fileClose = fileClose,
             .fileWriteStreaming = fileWriteStreaming,
             .fileWritePositional = fileWritePositional,
@@ -1685,6 +1686,12 @@ fn dirOpenDirPosix(
     @panic("TODO");
 }
 
+fn dirClose(userdata: ?*anyopaque, dir: Io.Dir) void {
+    const t: *Threaded = @ptrCast(@alignCast(userdata));
+    _ = t;
+    posix.close(dir.handle);
+}
+
 fn dirOpenDirWasi(
     userdata: ?*anyopaque,
     dir: Io.Dir,
lib/std/Io.zig
@@ -667,6 +667,7 @@ pub const VTable = struct {
     dirCreateFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.CreateFlags) File.OpenError!File,
     dirOpenFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.OpenFlags) File.OpenError!File,
     dirOpenDir: *const fn (?*anyopaque, Dir, sub_path: []const u8, Dir.OpenOptions) Dir.OpenError!Dir,
+    dirClose: *const fn (?*anyopaque, Dir) void,
     fileStat: *const fn (?*anyopaque, File) File.StatError!File.Stat,
     fileClose: *const fn (?*anyopaque, File) void,
     fileWriteStreaming: *const fn (?*anyopaque, File, buffer: [][]const u8) File.WriteStreamingError!usize,