mirror of https://github.com/AxioDL/nod.git
Refactor to remove <Windows.h> from headers
This commit is contained in:
parent
30697375ad
commit
72893dcacb
|
@ -4,14 +4,8 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cwctype>
|
#include <cwctype>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
#define WIN32_LEAN_AND_MEAN 1
|
|
||||||
#endif
|
|
||||||
#ifndef NOMINMAX
|
|
||||||
#define NOMINMAX
|
|
||||||
#endif
|
|
||||||
#include <nowide/stackstring.hpp>
|
#include <nowide/stackstring.hpp>
|
||||||
#include <windows.h>
|
#include <winapifamily.h>
|
||||||
#if defined(WINAPI_FAMILY) && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP
|
#if defined(WINAPI_FAMILY) && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP
|
||||||
#define WINDOWS_STORE 1
|
#define WINDOWS_STORE 1
|
||||||
#else
|
#else
|
||||||
|
@ -181,32 +175,7 @@ static inline uint64_t SBig(uint64_t val) { return val; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum class FileLockType { None = 0, Read, Write };
|
enum class FileLockType { None = 0, Read, Write };
|
||||||
static inline FILE* Fopen(const char* path, const char* mode, FileLockType lock = FileLockType::None) {
|
FILE* Fopen(const char* path, const char* mode, FileLockType lock = FileLockType::None);
|
||||||
#if _MSC_VER
|
|
||||||
const nowide::wstackstring wpath(path);
|
|
||||||
const nowide::wshort_stackstring wmode(mode);
|
|
||||||
FILE* fp = _wfopen(wpath.get(), wmode.get());
|
|
||||||
if (!fp)
|
|
||||||
return nullptr;
|
|
||||||
#else
|
|
||||||
FILE* fp = fopen(path, mode);
|
|
||||||
if (!fp)
|
|
||||||
return nullptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (lock != FileLockType::None) {
|
|
||||||
#if _WIN32
|
|
||||||
OVERLAPPED ov = {};
|
|
||||||
LockFileEx((HANDLE)(uintptr_t)_fileno(fp), (lock == FileLockType::Write) ? LOCKFILE_EXCLUSIVE_LOCK : 0, 0, 0, 1,
|
|
||||||
&ov);
|
|
||||||
#else
|
|
||||||
if (flock(fileno(fp), ((lock == FileLockType::Write) ? LOCK_EX : LOCK_SH) | LOCK_NB))
|
|
||||||
LogModule.report(logvisor::Error, FMT_STRING("flock {}: {}"), path, strerror(errno));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
return fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int FSeek(FILE* fp, int64_t offset, int whence) {
|
static inline int FSeek(FILE* fp, int64_t offset, int whence) {
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
|
@ -228,33 +197,6 @@ static inline int64_t FTell(FILE* fp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool CheckFreeSpace(const char* path, size_t reqSz) {
|
bool CheckFreeSpace(const char* path, size_t reqSz);
|
||||||
#if _WIN32
|
|
||||||
ULARGE_INTEGER freeBytes;
|
|
||||||
const nowide::wstackstring wpath(path);
|
|
||||||
std::array<wchar_t, 1024> buf{};
|
|
||||||
wchar_t* end = nullptr;
|
|
||||||
DWORD ret = GetFullPathNameW(wpath.get(), 1024, buf.data(), &end);
|
|
||||||
if (ret == 0 || ret > 1024) {
|
|
||||||
LogModule.report(logvisor::Error, FMT_STRING("GetFullPathNameW {}"), path);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (end != nullptr) {
|
|
||||||
end[0] = L'\0';
|
|
||||||
}
|
|
||||||
if (!GetDiskFreeSpaceExW(buf.data(), &freeBytes, nullptr, nullptr)) {
|
|
||||||
LogModule.report(logvisor::Error, FMT_STRING("GetDiskFreeSpaceExW {}: {}"), path, GetLastError());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return reqSz < freeBytes.QuadPart;
|
|
||||||
#else
|
|
||||||
struct statvfs svfs;
|
|
||||||
if (statvfs(path, &svfs)) {
|
|
||||||
LogModule.report(logvisor::Error, FMT_STRING("statvfs {}: {}"), path, strerror(errno));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return reqSz < svfs.f_frsize * svfs.f_bavail;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace nod
|
} // namespace nod
|
||||||
|
|
|
@ -11,6 +11,7 @@ add_library(nod
|
||||||
DiscWii.cpp
|
DiscWii.cpp
|
||||||
nod.cpp
|
nod.cpp
|
||||||
OSUTF.c
|
OSUTF.c
|
||||||
|
Util.cpp
|
||||||
|
|
||||||
../include/nod/aes.hpp
|
../include/nod/aes.hpp
|
||||||
../include/nod/DirectoryEnumerator.hpp
|
../include/nod/DirectoryEnumerator.hpp
|
||||||
|
@ -20,9 +21,9 @@ add_library(nod
|
||||||
../include/nod/IDiscIO.hpp
|
../include/nod/IDiscIO.hpp
|
||||||
../include/nod/IFileIO.hpp
|
../include/nod/IFileIO.hpp
|
||||||
../include/nod/nod.hpp
|
../include/nod/nod.hpp
|
||||||
|
../include/nod/OSUTF.h
|
||||||
../include/nod/sha1.h
|
../include/nod/sha1.h
|
||||||
../include/nod/Util.hpp
|
../include/nod/Util.hpp
|
||||||
../include/nod/OSUTF.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(nod PUBLIC
|
target_include_directories(nod PUBLIC
|
||||||
|
|
|
@ -1,7 +1,13 @@
|
||||||
#include <cinttypes>
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstdio>
|
#if _WIN32
|
||||||
#include <cstdlib>
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
|
#endif
|
||||||
|
#ifndef NOMINMAX
|
||||||
|
#define NOMINMAX
|
||||||
|
#endif
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "nod/IFileIO.hpp"
|
#include "nod/IFileIO.hpp"
|
||||||
#include "nod/Util.hpp"
|
#include "nod/Util.hpp"
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
#include <nod/Util.hpp>
|
||||||
|
|
||||||
|
#if _WIN32
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
|
#endif
|
||||||
|
#ifndef NOMINMAX
|
||||||
|
#define NOMINMAX
|
||||||
|
#endif
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace nod {
|
||||||
|
FILE* Fopen(const char* path, const char* mode, FileLockType lock) {
|
||||||
|
#if _WIN32
|
||||||
|
const nowide::wstackstring wpath(path);
|
||||||
|
const nowide::wshort_stackstring wmode(mode);
|
||||||
|
FILE* fp = _wfopen(wpath.get(), wmode.get());
|
||||||
|
if (!fp)
|
||||||
|
return nullptr;
|
||||||
|
#else
|
||||||
|
FILE* fp = fopen(path, mode);
|
||||||
|
if (!fp)
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (lock != FileLockType::None) {
|
||||||
|
#if _WIN32
|
||||||
|
OVERLAPPED ov = {};
|
||||||
|
LockFileEx((HANDLE)(uintptr_t)_fileno(fp), (lock == FileLockType::Write) ? LOCKFILE_EXCLUSIVE_LOCK : 0, 0, 0, 1,
|
||||||
|
&ov);
|
||||||
|
#else
|
||||||
|
if (flock(fileno(fp), ((lock == FileLockType::Write) ? LOCK_EX : LOCK_SH) | LOCK_NB))
|
||||||
|
LogModule.report(logvisor::Error, FMT_STRING("flock {}: {}"), path, strerror(errno));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return fp;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CheckFreeSpace(const char* path, size_t reqSz) {
|
||||||
|
#if _WIN32
|
||||||
|
ULARGE_INTEGER freeBytes;
|
||||||
|
const nowide::wstackstring wpath(path);
|
||||||
|
std::array<wchar_t, 1024> buf{};
|
||||||
|
wchar_t* end = nullptr;
|
||||||
|
DWORD ret = GetFullPathNameW(wpath.get(), 1024, buf.data(), &end);
|
||||||
|
if (ret == 0 || ret > 1024) {
|
||||||
|
LogModule.report(logvisor::Error, FMT_STRING("GetFullPathNameW {}"), path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (end != nullptr) {
|
||||||
|
end[0] = L'\0';
|
||||||
|
}
|
||||||
|
if (!GetDiskFreeSpaceExW(buf.data(), &freeBytes, nullptr, nullptr)) {
|
||||||
|
LogModule.report(logvisor::Error, FMT_STRING("GetDiskFreeSpaceExW {}: {}"), path, GetLastError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return reqSz < freeBytes.QuadPart;
|
||||||
|
#else
|
||||||
|
struct statvfs svfs;
|
||||||
|
if (statvfs(path, &svfs)) {
|
||||||
|
LogModule.report(logvisor::Error, FMT_STRING("statvfs {}: {}"), path, strerror(errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return reqSz < svfs.f_frsize * svfs.f_bavail;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} // namespace nod
|
Loading…
Reference in New Issue