diff options
| -rw-r--r-- | zenserver/config.cpp | 51 |
1 files changed, 9 insertions, 42 deletions
diff --git a/zenserver/config.cpp b/zenserver/config.cpp index eb10420c8..4cb949b0e 100644 --- a/zenserver/config.cpp +++ b/zenserver/config.cpp @@ -32,52 +32,19 @@ std::filesystem::path PickDefaultStateDirectory() { // Pick sensible default - - WCHAR myDocumentsDir[MAX_PATH]; - HRESULT hRes = SHGetFolderPathW(NULL, - CSIDL_PERSONAL /* My Documents */, - NULL, - SHGFP_TYPE_CURRENT, - /* out */ myDocumentsDir); + PWSTR programDataDir = nullptr; + HRESULT hRes = SHGetKnownFolderPath(FOLDERID_ProgramData, + 0, + NULL, + &programDataDir); if (SUCCEEDED(hRes)) { - wcscat_s(myDocumentsDir, L"\\zen"); - - return myDocumentsDir; - } + std::filesystem::path finalPath(programDataDir); + finalPath /= L"Epic\\Zen\\Data"; + ::CoTaskMemFree(programDataDir); - int CandidateDriveLetterOffset = -1; - ULARGE_INTEGER CandidateDriveSize; - CandidateDriveSize.QuadPart = 0L; - DWORD LogicalDrives = GetLogicalDrives(); - char CandidateDriveName[] = "A:\\"; - for (int DriveLetterOffset = 0; DriveLetterOffset < 32; ++DriveLetterOffset) - { - if ((LogicalDrives & (1 << DriveLetterOffset)) != 0) - { - CandidateDriveName[0] = (char)('A' + DriveLetterOffset); - if (GetDriveTypeA(CandidateDriveName) == DRIVE_FIXED) - { - ULARGE_INTEGER FreeBytesAvailableToCaller; - ULARGE_INTEGER TotalNumberOfBytes; - if (0 != GetDiskFreeSpaceExA(CandidateDriveName, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, nullptr)) - { - if ((FreeBytesAvailableToCaller.QuadPart > 0) && (TotalNumberOfBytes.QuadPart > CandidateDriveSize.QuadPart)) - { - CandidateDriveLetterOffset = DriveLetterOffset; - CandidateDriveSize = TotalNumberOfBytes; - } - } - } - } - } - - if (CandidateDriveLetterOffset >= 0) - { - char RootZenFolderName[] = "A:\\zen"; - RootZenFolderName[0] = (char)('A' + CandidateDriveLetterOffset); - return RootZenFolderName; + return finalPath; } return L""; |