From 733b2082565a86daac6f2b22a1a27f0b60621b4e Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 25 Jul 2025 14:14:40 -0700 Subject: [PATCH] std.posix.ftruncate: handle NonResizable properly --- lib/std/fs/File.zig | 5 ++++- lib/std/posix.zig | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index 325a189fa873e7112d857d17ec6e704b2c18993b..fd965babfc6e0de1c01e56ae945fa23a39ec1870 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -2029,7 +2029,10 @@ pub const Writer = struct { switch (w.mode) { .positional, .positional_reading, - => try w.file.setEndPos(w.pos), + => w.file.setEndPos(w.pos) catch |err| switch (err) { + error.NonResizable => return, + else => |e| return e, + }, .streaming, .streaming_reading, diff --git a/lib/std/posix.zig b/lib/std/posix.zig index d8806fe40cbe764d129ef67bfecade217c139b82..54c6470d2c11f1eda31d16c56fe9269b2c6f96e1 100644 --- a/lib/std/posix.zig +++ b/lib/std/posix.zig @@ -1052,6 +1052,7 @@ pub const TruncateError = error{ FileBusy, AccessDenied, PermissionDenied, + NonResizable, } || UnexpectedError; /// Length must be positive when treated as an i64. @@ -1091,7 +1092,7 @@ pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void { .PERM => return error.PermissionDenied, .TXTBSY => return error.FileBusy, .BADF => unreachable, // Handle not open for writing - .INVAL => unreachable, // Handle not open for writing, negative length, or non-resizable handle + .INVAL => return error.NonResizable, .NOTCAPABLE => return error.AccessDenied, else => |err| return unexpectedErrno(err), } @@ -1107,7 +1108,7 @@ pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void { .PERM => return error.PermissionDenied, .TXTBSY => return error.FileBusy, .BADF => unreachable, // Handle not open for writing - .INVAL => unreachable, // Handle not open for writing, negative length, or non-resizable handle + .INVAL => return error.NonResizable, // This is returned for /dev/null for example. else => |err| return unexpectedErrno(err), } } -- 2.54.0