diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-08-10 17:44:30 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-08-10 17:51:22 -0700 |
| commit | b9a6dae2ae68d74d7f2fc2bfe394eb506fb7ca69 (patch) | |
| tree | f9e29379e311211d8a6ae70a6f967cc8e1d563b1 /lib/std/fs/File.zig | |
| parent | e667884f9ba21c7cdec7581d89b9a9f622c5ffb9 (diff) | |
| download | zig-b9a6dae2ae68d74d7f2fc2bfe394eb506fb7ca69.tar.gz zig-b9a6dae2ae68d74d7f2fc2bfe394eb506fb7ca69.zip | |
std.fs.File.Reader.getSize: check file kind on stat
closes #24794
Diffstat (limited to 'lib/std/fs/File.zig')
| -rw-r--r-- | lib/std/fs/File.zig | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index 969c35e6b1..437627629d 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -1202,12 +1202,26 @@ pub const Reader = struct { }; } - pub fn getSize(r: *Reader) GetEndPosError!u64 { + pub fn getSize(r: *Reader) SizeError!u64 { return r.size orelse { if (r.size_err) |err| return err; - if (r.file.getEndPos()) |size| { - r.size = size; - return size; + if (is_windows) { + if (windows.GetFileSizeEx(r.file.handle)) |size| { + r.size = size; + return size; + } else |err| { + r.size_err = err; + return err; + } + } + if (stat(r.file)) |st| { + if (st.kind == .file) { + r.size = st.size; + return st.size; + } else { + r.size_err = error.Streaming; + return error.Streaming; + } } else |err| { r.size_err = err; return err; |
