aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Io
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-12-08 15:42:42 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-12-23 22:15:08 -0800
commit7f5bb118d4d90e2b883ee66e17592ac8d7808ac8 (patch)
treea9ea1f3ad962cdfb7597b6e1a1d89982f7199c35 /lib/std/Io
parent6f46570958af8ae27308eb4a9470e05f33aaa522 (diff)
downloadzig-7f5bb118d4d90e2b883ee66e17592ac8d7808ac8.tar.gz
zig-7f5bb118d4d90e2b883ee66e17592ac8d7808ac8.zip
std.Io: make all the close functions batched
Diffstat (limited to 'lib/std/Io')
-rw-r--r--lib/std/Io/Dir.zig6
-rw-r--r--lib/std/Io/File.zig6
-rw-r--r--lib/std/Io/Threaded.zig18
-rw-r--r--lib/std/Io/net.zig8
4 files changed, 25 insertions, 13 deletions
diff --git a/lib/std/Io/Dir.zig b/lib/std/Io/Dir.zig
index 9189a4c609..58f81cbb90 100644
--- a/lib/std/Io/Dir.zig
+++ b/lib/std/Io/Dir.zig
@@ -446,7 +446,11 @@ pub fn openDirAbsolute(io: Io, absolute_path: []const u8, options: OpenOptions)
}
pub fn close(dir: Dir, io: Io) void {
- return io.vtable.dirClose(io.userdata, dir);
+ return io.vtable.dirClose(io.userdata, (&dir)[0..1]);
+}
+
+pub fn closeMany(io: Io, dirs: []const Dir) void {
+ return io.vtable.dirClose(io.userdata, dirs);
}
/// Opens a file for reading or writing, without attempting to create a new file.
diff --git a/lib/std/Io/File.zig b/lib/std/Io/File.zig
index 5e89025478..302d2a8ca5 100644
--- a/lib/std/Io/File.zig
+++ b/lib/std/Io/File.zig
@@ -252,7 +252,11 @@ pub const OpenError = error{
} || Io.Dir.PathNameError || Io.Cancelable || Io.UnexpectedError;
pub fn close(file: File, io: Io) void {
- return io.vtable.fileClose(io.userdata, file);
+ return io.vtable.fileClose(io.userdata, (&file)[0..1]);
+}
+
+pub fn closeMany(io: Io, files: []const File) void {
+ return io.vtable.fileClose(io.userdata, files);
}
pub const SyncError = error{
diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig
index 6a650f8ccf..4ee1d5db53 100644
--- a/lib/std/Io/Threaded.zig
+++ b/lib/std/Io/Threaded.zig
@@ -3243,10 +3243,10 @@ const MakeOpenDirAccessMaskWOptions = struct {
create_disposition: u32,
};
-fn dirClose(userdata: ?*anyopaque, dir: Dir) void {
+fn dirClose(userdata: ?*anyopaque, dirs: []const Dir) void {
const t: *Threaded = @ptrCast(@alignCast(userdata));
_ = t;
- posix.close(dir.handle);
+ for (dirs) |dir| posix.close(dir.handle);
}
const dirRealPath = switch (native_os) {
@@ -5515,10 +5515,10 @@ fn dirOpenDirWasi(
}
}
-fn fileClose(userdata: ?*anyopaque, file: File) void {
+fn fileClose(userdata: ?*anyopaque, files: []const File) void {
const t: *Threaded = @ptrCast(@alignCast(userdata));
_ = t;
- posix.close(file.handle);
+ for (files) |file| posix.close(file.handle);
}
const fileReadStreaming = switch (native_os) {
@@ -9084,18 +9084,18 @@ fn addBuf(v: []posix.iovec_const, i: *iovlen_t, bytes: []const u8) void {
i.* += 1;
}
-fn netClose(userdata: ?*anyopaque, handle: net.Socket.Handle) void {
+fn netClose(userdata: ?*anyopaque, handles: []const net.Socket.Handle) void {
const t: *Threaded = @ptrCast(@alignCast(userdata));
_ = t;
switch (native_os) {
- .windows => closeSocketWindows(handle),
- else => posix.close(handle),
+ .windows => for (handles) |handle| closeSocketWindows(handle),
+ else => for (handles) |handle| posix.close(handle),
}
}
-fn netCloseUnavailable(userdata: ?*anyopaque, handle: net.Socket.Handle) void {
+fn netCloseUnavailable(userdata: ?*anyopaque, handles: []const net.Socket.Handle) void {
_ = userdata;
- _ = handle;
+ _ = handles;
unreachable; // How you gonna close something that was impossible to open?
}
diff --git a/lib/std/Io/net.zig b/lib/std/Io/net.zig
index 2a56f3a4ab..8b8728b6f1 100644
--- a/lib/std/Io/net.zig
+++ b/lib/std/Io/net.zig
@@ -1043,7 +1043,11 @@ pub const Socket = struct {
/// Leaves `address` in a valid state.
pub fn close(s: *const Socket, io: Io) void {
- io.vtable.netClose(io.userdata, s.handle);
+ io.vtable.netClose(io.userdata, (&s.handle)[0..1]);
+ }
+
+ pub fn closeMany(io: Io, sockets: []const Socket) void {
+ io.vtable.netClose(io.userdata, sockets);
}
pub const SendError = error{
@@ -1184,7 +1188,7 @@ pub const Stream = struct {
const max_iovecs_len = 8;
pub fn close(s: *const Stream, io: Io) void {
- io.vtable.netClose(io.userdata, s.socket.handle);
+ io.vtable.netClose(io.userdata, (&s.socket.handle)[0..1]);
}
pub const Reader = struct {