Skip to content

Commit

Permalink
Codechange: Replace platform-specific calls with std::filesystem::las…
Browse files Browse the repository at this point in the history
…t_write_time.
  • Loading branch information
PeterN committed Apr 12, 2024
1 parent ca73f03 commit 6e5b6a1
Showing 1 changed file with 6 additions and 28 deletions.
34 changes: 6 additions & 28 deletions src/fios.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,7 @@
#include "tar_type.h"
#include <sys/stat.h>
#include <charconv>

#ifndef _WIN32
# include <unistd.h>
#endif /* _WIN32 */
#include <filesystem>

#include "table/strings.h"

Expand Down Expand Up @@ -292,32 +289,13 @@ bool FiosFileScanner::AddFile(const std::string &filename, size_t, const std::st
}

FiosItem *fios = &file_list.emplace_back();
#ifdef _WIN32
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
HANDLE fh = CreateFile(OTTD2FS(filename).c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);

if (fh != INVALID_HANDLE_VALUE) {
FILETIME ft;
ULARGE_INTEGER ft_int64;

if (GetFileTime(fh, nullptr, nullptr, &ft) != 0) {
ft_int64.HighPart = ft.dwHighDateTime;
ft_int64.LowPart = ft.dwLowDateTime;

// Convert from hectonanoseconds since 01/01/1601 to seconds since 01/01/1970
fios->mtime = ft_int64.QuadPart / 10000000ULL - 11644473600ULL;
} else {
fios->mtime = 0;
}

CloseHandle(fh);
#else
struct stat sb;
if (stat(filename.c_str(), &sb) == 0) {
fios->mtime = sb.st_mtime;
#endif
} else {
std::error_code error_code;
auto write_time = std::filesystem::last_write_time(OTTD2FS(filename), error_code);
if (error_code) {
fios->mtime = 0;
} else {
fios->mtime = std::chrono::duration_cast<std::chrono::seconds>(write_time.time_since_epoch()).count();
}

fios->type = type;
Expand Down

0 comments on commit 6e5b6a1

Please sign in to comment.