Skip to content

Commit 733b208

Browse files
committed
std.posix.ftruncate: handle NonResizable properly
1 parent 8752d80 commit 733b208

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

lib/std/fs/File.zig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2029,7 +2029,10 @@ pub const Writer = struct {
20292029
switch (w.mode) {
20302030
.positional,
20312031
.positional_reading,
2032-
=> try w.file.setEndPos(w.pos),
2032+
=> w.file.setEndPos(w.pos) catch |err| switch (err) {
2033+
error.NonResizable => return,
2034+
else => |e| return e,
2035+
},
20332036

20342037
.streaming,
20352038
.streaming_reading,

lib/std/posix.zig

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,7 @@ pub const TruncateError = error{
10521052
FileBusy,
10531053
AccessDenied,
10541054
PermissionDenied,
1055+
NonResizable,
10551056
} || UnexpectedError;
10561057

10571058
/// Length must be positive when treated as an i64.
@@ -1091,7 +1092,7 @@ pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void {
10911092
.PERM => return error.PermissionDenied,
10921093
.TXTBSY => return error.FileBusy,
10931094
.BADF => unreachable, // Handle not open for writing
1094-
.INVAL => unreachable, // Handle not open for writing, negative length, or non-resizable handle
1095+
.INVAL => return error.NonResizable,
10951096
.NOTCAPABLE => return error.AccessDenied,
10961097
else => |err| return unexpectedErrno(err),
10971098
}
@@ -1107,7 +1108,7 @@ pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void {
11071108
.PERM => return error.PermissionDenied,
11081109
.TXTBSY => return error.FileBusy,
11091110
.BADF => unreachable, // Handle not open for writing
1110-
.INVAL => unreachable, // Handle not open for writing, negative length, or non-resizable handle
1111+
.INVAL => return error.NonResizable, // This is returned for /dev/null for example.
11111112
else => |err| return unexpectedErrno(err),
11121113
}
11131114
}

0 commit comments

Comments
 (0)