authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-19 07:08:13-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-10-29 06:20:50-07:00
log83e4ff6f4c739096806b951e7c6e54399c18d19b
treed2226d860751bbb682077a2b96aac5856e9e4ad0
parent21e195a1a96100cd5bcd47b6d9565b2141ad13e1

std.Io: add dirClose


4 files changed, 14 insertions(+), 9 deletions(-)

lib/std/Io.zig+1
......@@ -667,6 +667,7 @@ pub const VTable = struct {
667667 dirCreateFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.CreateFlags) File.OpenError!File,
668668 dirOpenFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.OpenFlags) File.OpenError!File,
669669 dirOpenDir: *const fn (?*anyopaque, Dir, sub_path: []const u8, Dir.OpenOptions) Dir.OpenError!Dir,
670 dirClose: *const fn (?*anyopaque, Dir) void,
670671 fileStat: *const fn (?*anyopaque, File) File.StatError!File.Stat,
671672 fileClose: *const fn (?*anyopaque, File) void,
672673 fileWriteStreaming: *const fn (?*anyopaque, File, buffer: [][]const u8) File.WriteStreamingError!usize,
lib/std/Io/Dir.zig+4
......@@ -93,6 +93,10 @@ pub fn openDir(dir: Dir, io: Io, sub_path: []const u8, options: OpenOptions) Ope
9393 return io.vtable.dirOpenDir(io.userdata, dir, sub_path, options);
9494}
9595
96pub fn close(dir: Dir, io: Io) void {
97 return io.vtable.dirClose(io.userdata, dir);
98}
99
96100pub fn openFile(dir: Dir, io: Io, sub_path: []const u8, flags: File.OpenFlags) File.OpenError!File {
97101 return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
98102}
lib/std/Io/Threaded.zig+7
......@@ -203,6 +203,7 @@ pub fn io(t: *Threaded) Io {
203203 .wasi => dirOpenDirWasi,
204204 else => dirOpenDirPosix,
205205 },
206 .dirClose = dirClose,
206207 .fileClose = fileClose,
207208 .fileWriteStreaming = fileWriteStreaming,
208209 .fileWritePositional = fileWritePositional,
......@@ -1685,6 +1686,12 @@ fn dirOpenDirPosix(
16851686 @panic("TODO");
16861687}
16871688
1689fn dirClose(userdata: ?*anyopaque, dir: Io.Dir) void {
1690 const t: *Threaded = @ptrCast(@alignCast(userdata));
1691 _ = t;
1692 posix.close(dir.handle);
1693}
1694
16881695fn dirOpenDirWasi(
16891696 userdata: ?*anyopaque,
16901697 dir: Io.Dir,
lib/std/Io/net.zig+2-9
......@@ -1033,9 +1033,8 @@ pub const Socket = struct {
10331033 };
10341034
10351035 /// Leaves `address` in a valid state.
1036 pub fn close(s: *Socket, io: Io) void {
1036 pub fn close(s: *const Socket, io: Io) void {
10371037 io.vtable.netClose(io.userdata, s.handle);
1038 s.handle = undefined;
10391038 }
10401039
10411040 pub const SendError = error{
......@@ -1163,13 +1162,7 @@ pub const Stream = struct {
11631162
11641163 const max_iovecs_len = 8;
11651164
1166 pub fn close(s: *Stream, io: Io) void {
1167 io.vtable.netClose(io.userdata, s.socket.handle);
1168 s.* = undefined;
1169 }
1170
1171 /// Same as `close` but doesn't try to set `Stream` to `undefined`.
1172 pub fn closeConst(s: *const Stream, io: Io) void {
1165 pub fn close(s: *const Stream, io: Io) void {
11731166 io.vtable.netClose(io.userdata, s.socket.handle);
11741167 }
11751168