Skip to content

Commit b9a6dae

Browse files
committed
std.fs.File.Reader.getSize: check file kind on stat
closes #24794
1 parent e667884 commit b9a6dae

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

lib/std/fs/File.zig

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,12 +1202,26 @@ pub const Reader = struct {
12021202
};
12031203
}
12041204

1205-
pub fn getSize(r: *Reader) GetEndPosError!u64 {
1205+
pub fn getSize(r: *Reader) SizeError!u64 {
12061206
return r.size orelse {
12071207
if (r.size_err) |err| return err;
1208-
if (r.file.getEndPos()) |size| {
1209-
r.size = size;
1210-
return size;
1208+
if (is_windows) {
1209+
if (windows.GetFileSizeEx(r.file.handle)) |size| {
1210+
r.size = size;
1211+
return size;
1212+
} else |err| {
1213+
r.size_err = err;
1214+
return err;
1215+
}
1216+
}
1217+
if (stat(r.file)) |st| {
1218+
if (st.kind == .file) {
1219+
r.size = st.size;
1220+
return st.size;
1221+
} else {
1222+
r.size_err = error.Streaming;
1223+
return error.Streaming;
1224+
}
12111225
} else |err| {
12121226
r.size_err = err;
12131227
return err;

lib/std/tar/Writer.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub fn writeDir(w: *Writer, sub_path: []const u8, options: Options) Error!void {
3636
try w.writeHeader(.directory, sub_path, "", 0, options);
3737
}
3838

39-
pub const WriteFileError = std.Io.Writer.FileError || Error || std.fs.File.GetEndPosError;
39+
pub const WriteFileError = std.Io.Writer.FileError || Error || std.fs.File.Reader.SizeError;
4040

4141
pub fn writeFile(
4242
w: *Writer,

lib/std/zip.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ pub const EndRecord = extern struct {
115115
return record;
116116
}
117117

118-
pub const FindFileError = File.GetEndPosError || File.SeekError || File.ReadError || error{
118+
pub const FindFileError = File.Reader.SizeError || File.SeekError || File.ReadError || error{
119119
ZipNoEndRecord,
120120
EndOfStream,
121121
ReadFailed,

0 commit comments

Comments
 (0)