Commit b9a6dae2ae
Changed files (3)
lib
std
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;
lib/std/tar/Writer.zig
@@ -36,7 +36,7 @@ pub fn writeDir(w: *Writer, sub_path: []const u8, options: Options) Error!void {
try w.writeHeader(.directory, sub_path, "", 0, options);
}
-pub const WriteFileError = std.Io.Writer.FileError || Error || std.fs.File.GetEndPosError;
+pub const WriteFileError = std.Io.Writer.FileError || Error || std.fs.File.Reader.SizeError;
pub fn writeFile(
w: *Writer,
lib/std/zip.zig
@@ -115,7 +115,7 @@ pub const EndRecord = extern struct {
return record;
}
- pub const FindFileError = File.GetEndPosError || File.SeekError || File.ReadError || error{
+ pub const FindFileError = File.Reader.SizeError || File.SeekError || File.ReadError || error{
ZipNoEndRecord,
EndOfStream,
ReadFailed,