diff options
| author | Dan Engelbrecht <[email protected]> | 2023-10-25 12:18:14 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-25 12:18:14 +0200 |
| commit | a8667478c57eaed7bfceccdbdd62da04eeca6445 (patch) | |
| tree | 04928d2effef67caa44b3b44320e610e524ef29f /src/zenutil/basicfile.cpp | |
| parent | removed HttpCidStore (#497) (diff) | |
| download | zen-a8667478c57eaed7bfceccdbdd62da04eeca6445.tar.xz zen-a8667478c57eaed7bfceccdbdd62da04eeca6445.zip | |
New rotating file logger that keeps on running regardless of errors (#495)
* New rotating file logger that keeps on running regardless of errors
Diffstat (limited to 'src/zenutil/basicfile.cpp')
| -rw-r--r-- | src/zenutil/basicfile.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/zenutil/basicfile.cpp b/src/zenutil/basicfile.cpp index 259d622c4..1dce71e60 100644 --- a/src/zenutil/basicfile.cpp +++ b/src/zenutil/basicfile.cpp @@ -365,7 +365,39 @@ BasicFile::FileSize() int Fd = int(uintptr_t(m_FileHandle)); static_assert(sizeof(decltype(stat::st_size)) == sizeof(uint64_t), "fstat() doesn't support large files"); struct stat Stat; - fstat(Fd, &Stat); + if (fstat(Fd, &Stat) == -1) + { + ThrowSystemError(GetLastError(), fmt::format("Failed to get file size from file '{}'", PathFromHandle(m_FileHandle))); + } + return uint64_t(Stat.st_size); +#endif +} + +uint64_t +BasicFile::FileSize(std::error_code& Ec) +{ +#if ZEN_PLATFORM_WINDOWS + ULARGE_INTEGER liFileSize; + liFileSize.LowPart = ::GetFileSize(m_FileHandle, &liFileSize.HighPart); + if (liFileSize.LowPart == INVALID_FILE_SIZE) + { + int Error = zen::GetLastError(); + if (Error) + { + Ec = MakeErrorCode(Error); + return 0; + } + } + return uint64_t(liFileSize.QuadPart); +#else + int Fd = int(uintptr_t(m_FileHandle)); + static_assert(sizeof(decltype(stat::st_size)) == sizeof(uint64_t), "fstat() doesn't support large files"); + struct stat Stat; + if (fstat(Fd, &Stat) == -1) + { + Ec = MakeErrorCodeFromLastError(); + return 0; + } return uint64_t(Stat.st_size); #endif } |