| ... | ... | @@ -253,17 +253,30 @@ pub const File = struct { |
| 253 | 253 | } |
| 254 | 254 | |
| 255 | 255 | pub fn getEndPos(self: &File) -> %usize { |
| 256 | | var stat: system.Stat = undefined; |
| 257 | | const err = system.getErrno(system.fstat(self.handle, &stat)); |
| 258 | | if (err > 0) { |
| 259 | | return switch (err) { |
| 260 | | system.EBADF => error.BadFd, |
| 261 | | system.ENOMEM => error.OutOfMemory, |
| 262 | | else => os.unexpectedErrorPosix(err), |
| 256 | if (is_posix) { |
| 257 | var stat: system.Stat = undefined; |
| 258 | const err = system.getErrno(system.fstat(self.handle, &stat)); |
| 259 | if (err > 0) { |
| 260 | return switch (err) { |
| 261 | system.EBADF => error.BadFd, |
| 262 | system.ENOMEM => error.OutOfMemory, |
| 263 | else => os.unexpectedErrorPosix(err), |
| 264 | } |
| 263 | 265 | } |
| 264 | | } |
| 265 | 266 | |
| 266 | | return usize(stat.size); |
| 267 | return usize(stat.size); |
| 268 | } else if (is_windows) { |
| 269 | var file_size: system.LARGE_INTEGER = undefined; |
| 270 | if (system.GetFileSizeEx(self.handle, &file_size) == 0) { |
| 271 | const err = system.GetLastError(); |
| 272 | return switch (err) { |
| 273 | else => os.unexpectedErrorWindows(err), |
| 274 | }; |
| 275 | } |
| 276 | return @bitCast(usize, file_size); |
| 277 | } else { |
| 278 | unreachable; |
| 279 | } |
| 267 | 280 | } |
| 268 | 281 | |
| 269 | 282 | pub fn read(self: &File, buffer: []u8) -> %usize { |