aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Io
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-12-05 19:08:37 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-12-23 22:15:07 -0800
commitaafddc2ea13e40a8262d9378aeca2e097a37ac03 (patch)
tree46770e51147a635a43c2e7356e62064466b51c34 /lib/std/Io
parenteab354b2f5d7242c036523394023e9824be7eca9 (diff)
downloadzig-aafddc2ea13e40a8262d9378aeca2e097a37ac03.tar.gz
zig-aafddc2ea13e40a8262d9378aeca2e097a37ac03.zip
update all occurrences of close() to close(io)
Diffstat (limited to 'lib/std/Io')
-rw-r--r--lib/std/Io/Dir.zig41
-rw-r--r--lib/std/Io/Writer.zig6
-rw-r--r--lib/std/Io/net/test.zig10
-rw-r--r--lib/std/Io/test.zig16
4 files changed, 46 insertions, 27 deletions
diff --git a/lib/std/Io/Dir.zig b/lib/std/Io/Dir.zig
index 348950e20a..5a74c8ca72 100644
--- a/lib/std/Io/Dir.zig
+++ b/lib/std/Io/Dir.zig
@@ -131,7 +131,7 @@ pub const SelectiveWalker = struct {
/// After each call to this function, and on deinit(), the memory returned
/// from this function becomes invalid. A copy must be made in order to keep
/// a reference to the path.
- pub fn next(self: *SelectiveWalker) Error!?Walker.Entry {
+ pub fn next(self: *SelectiveWalker, io: Io) Error!?Walker.Entry {
while (self.stack.items.len > 0) {
const top = &self.stack.items[self.stack.items.len - 1];
var dirname_len = top.dirname_len;
@@ -142,7 +142,7 @@ pub const SelectiveWalker = struct {
// likely just fail with the same error.
var item = self.stack.pop().?;
if (self.stack.items.len != 0) {
- item.iter.dir.close();
+ item.iter.dir.close(io);
}
return err;
}) |entry| {
@@ -164,7 +164,7 @@ pub const SelectiveWalker = struct {
} else {
var item = self.stack.pop().?;
if (self.stack.items.len != 0) {
- item.iter.dir.close();
+ item.iter.dir.close(io);
}
}
}
@@ -172,7 +172,7 @@ pub const SelectiveWalker = struct {
}
/// Traverses into the directory, continuing walking one level down.
- pub fn enter(self: *SelectiveWalker, entry: Walker.Entry) !void {
+ pub fn enter(self: *SelectiveWalker, io: Io, entry: Walker.Entry) !void {
if (entry.kind != .directory) {
@branchHint(.cold);
return;
@@ -184,7 +184,7 @@ pub const SelectiveWalker = struct {
else => |e| return e,
}
};
- errdefer new_dir.close();
+ errdefer new_dir.close(io);
try self.stack.append(self.allocator, .{
.iter = new_dir.iterateAssumeFirstIteration(),
@@ -200,11 +200,11 @@ pub const SelectiveWalker = struct {
/// Leaves the current directory, continuing walking one level up.
/// If the current entry is a directory entry, then the "current directory"
/// will pertain to that entry if `enter` is called before `leave`.
- pub fn leave(self: *SelectiveWalker) void {
+ pub fn leave(self: *SelectiveWalker, io: Io) void {
var item = self.stack.pop().?;
if (self.stack.items.len != 0) {
@branchHint(.likely);
- item.iter.dir.close();
+ item.iter.dir.close(io);
}
}
};
@@ -558,7 +558,8 @@ pub fn makeDir(dir: Dir, io: Io, sub_path: []const u8, permissions: Permissions)
pub const MakePathError = MakeError || StatPathError;
-/// Creates parent directories as necessary to ensure `sub_path` exists as a directory.
+/// Creates parent directories with default permissions as necessary to ensure
+/// `sub_path` exists as a directory.
///
/// Returns success if the path already exists and is a directory.
///
@@ -579,8 +580,11 @@ pub const MakePathError = MakeError || StatPathError;
/// - On other platforms, `..` are not resolved before the path is passed to `mkdirat`,
/// meaning a `sub_path` like "first/../second" will create both a `./first`
/// and a `./second` directory.
-pub fn makePath(dir: Dir, io: Io, sub_path: []const u8, permissions: Permissions) MakePathError!void {
- _ = try io.vtable.dirMakePath(io.userdata, dir, sub_path, permissions);
+///
+/// See also:
+/// * `makePathStatus`
+pub fn makePath(dir: Dir, io: Io, sub_path: []const u8) MakePathError!void {
+ _ = try io.vtable.dirMakePath(io.userdata, dir, sub_path, .default_dir);
}
pub const MakePathStatus = enum { existed, created };
@@ -593,6 +597,11 @@ pub fn makePathStatus(dir: Dir, io: Io, sub_path: []const u8, permissions: Permi
pub const MakeOpenPathError = MakeError || OpenError || StatPathError;
+pub const MakeOpenPathOptions = struct {
+ open_options: OpenOptions = .{},
+ permissions: Permissions = .default_dir,
+};
+
/// Performs the equivalent of `makePath` followed by `openDir`, atomically if possible.
///
/// When this operation is canceled, it may leave the file system in a
@@ -601,8 +610,8 @@ pub const MakeOpenPathError = MakeError || OpenError || StatPathError;
/// On Windows, `sub_path` should be encoded as [WTF-8](https://wtf-8.codeberg.page/).
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
-pub fn makeOpenPath(dir: Dir, io: Io, sub_path: []const u8, permissions: Permissions, options: OpenOptions) MakeOpenPathError!Dir {
- return io.vtable.dirMakeOpenPath(io.userdata, dir, sub_path, permissions, options);
+pub fn makeOpenPath(dir: Dir, io: Io, sub_path: []const u8, options: MakeOpenPathOptions) MakeOpenPathError!Dir {
+ return io.vtable.dirMakeOpenPath(io.userdata, dir, sub_path, options.permissions, options.open_options);
}
pub const Stat = File.Stat;
@@ -1266,10 +1275,10 @@ fn deleteTreeMinStackSizeWithKindHint(parent: Dir, io: Io, sub_path: []const u8,
start_over: while (true) {
var dir = (try parent.deleteTreeOpenInitialSubpath(io, sub_path, kind_hint)) orelse return;
var cleanup_dir_parent: ?Dir = null;
- defer if (cleanup_dir_parent) |*d| d.close();
+ defer if (cleanup_dir_parent) |*d| d.close(io);
var cleanup_dir = true;
- defer if (cleanup_dir) dir.close();
+ defer if (cleanup_dir) dir.close(io);
// Valid use of max_path_bytes because dir_name_buf will only
// ever store a single path component that was returned from the
@@ -1315,7 +1324,7 @@ fn deleteTreeMinStackSizeWithKindHint(parent: Dir, io: Io, sub_path: []const u8,
error.Canceled,
=> |e| return e,
};
- if (cleanup_dir_parent) |*d| d.close();
+ if (cleanup_dir_parent) |*d| d.close(io);
cleanup_dir_parent = dir;
dir = new_dir;
const result = dir_name_buf[0..entry.name.len];
@@ -1354,7 +1363,7 @@ fn deleteTreeMinStackSizeWithKindHint(parent: Dir, io: Io, sub_path: []const u8,
}
// Reached the end of the directory entries, which means we successfully deleted all of them.
// Now to remove the directory itself.
- dir.close();
+ dir.close(io);
cleanup_dir = false;
if (cleanup_dir_parent) |d| {
diff --git a/lib/std/Io/Writer.zig b/lib/std/Io/Writer.zig
index f49ef8eb67..5601293cfb 100644
--- a/lib/std/Io/Writer.zig
+++ b/lib/std/Io/Writer.zig
@@ -2835,7 +2835,7 @@ test "discarding sendFile" {
defer tmp_dir.cleanup();
const file = try tmp_dir.dir.createFile("input.txt", .{ .read = true });
- defer file.close();
+ defer file.close(io);
var r_buffer: [256]u8 = undefined;
var file_writer: std.fs.File.Writer = .init(file, &r_buffer);
try file_writer.interface.writeByte('h');
@@ -2857,7 +2857,7 @@ test "allocating sendFile" {
defer tmp_dir.cleanup();
const file = try tmp_dir.dir.createFile("input.txt", .{ .read = true });
- defer file.close();
+ defer file.close(io);
var r_buffer: [2]u8 = undefined;
var file_writer: std.fs.File.Writer = .init(file, &r_buffer);
try file_writer.interface.writeAll("abcd");
@@ -2881,7 +2881,7 @@ test sendFileReading {
defer tmp_dir.cleanup();
const file = try tmp_dir.dir.createFile("input.txt", .{ .read = true });
- defer file.close();
+ defer file.close(io);
var r_buffer: [2]u8 = undefined;
var file_writer: std.fs.File.Writer = .init(file, &r_buffer);
try file_writer.interface.writeAll("abcd");
diff --git a/lib/std/Io/net/test.zig b/lib/std/Io/net/test.zig
index e234a9edde..5818f6c3f7 100644
--- a/lib/std/Io/net/test.zig
+++ b/lib/std/Io/net/test.zig
@@ -232,8 +232,10 @@ test "listen on an in use port" {
fn testClientToHost(allocator: mem.Allocator, name: []const u8, port: u16) anyerror!void {
if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ const io = testing.io;
+
const connection = try net.tcpConnectToHost(allocator, name, port);
- defer connection.close();
+ defer connection.close(io);
var buf: [100]u8 = undefined;
const len = try connection.read(&buf);
@@ -244,8 +246,10 @@ fn testClientToHost(allocator: mem.Allocator, name: []const u8, port: u16) anyer
fn testClient(addr: net.IpAddress) anyerror!void {
if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ const io = testing.io;
+
const socket_file = try net.tcpConnectToAddress(addr);
- defer socket_file.close();
+ defer socket_file.close(io);
var buf: [100]u8 = undefined;
const len = try socket_file.read(&buf);
@@ -330,7 +334,7 @@ test "non-blocking tcp server" {
try testing.expectError(error.WouldBlock, accept_err);
const socket_file = try net.tcpConnectToAddress(server.socket.address);
- defer socket_file.close();
+ defer socket_file.close(io);
var stream = try server.accept(io);
defer stream.close(io);
diff --git a/lib/std/Io/test.zig b/lib/std/Io/test.zig
index f7965ed14e..9ea2d48ee5 100644
--- a/lib/std/Io/test.zig
+++ b/lib/std/Io/test.zig
@@ -28,7 +28,7 @@ test "write a file, read it, then delete it" {
const tmp_file_name = "temp_test_file.txt";
{
var file = try tmp.dir.createFile(tmp_file_name, .{});
- defer file.close();
+ defer file.close(io);
var file_writer = file.writer(&.{});
const st = &file_writer.interface;
@@ -45,7 +45,7 @@ test "write a file, read it, then delete it" {
{
var file = try tmp.dir.openFile(tmp_file_name, .{});
- defer file.close();
+ defer file.close(io);
const file_size = try file.getEndPos();
const expected_file_size: u64 = "begin".len + data.len + "end".len;
@@ -67,9 +67,11 @@ test "File seek ops" {
var tmp = tmpDir(.{});
defer tmp.cleanup();
+ const io = testing.io;
+
const tmp_file_name = "temp_test_file.txt";
var file = try tmp.dir.createFile(tmp_file_name, .{});
- defer file.close();
+ defer file.close(io);
try file.writeAll(&([_]u8{0x55} ** 8192));
@@ -88,12 +90,14 @@ test "File seek ops" {
}
test "setEndPos" {
+ const io = testing.io;
+
var tmp = tmpDir(.{});
defer tmp.cleanup();
const tmp_file_name = "temp_test_file.txt";
var file = try tmp.dir.createFile(tmp_file_name, .{});
- defer file.close();
+ defer file.close(io);
// Verify that the file size changes and the file offset is not moved
try expect((try file.getEndPos()) == 0);
@@ -111,12 +115,14 @@ test "setEndPos" {
}
test "updateTimes" {
+ const io = testing.io;
+
var tmp = tmpDir(.{});
defer tmp.cleanup();
const tmp_file_name = "just_a_temporary_file.txt";
var file = try tmp.dir.createFile(tmp_file_name, .{ .read = true });
- defer file.close();
+ defer file.close(io);
const stat_old = try file.stat();
// Set atime and mtime to 5s before