More code cleanup

- Set character set to multi-byte (this is because the game is also build with it).
- Utility function 'FileExists' now takes a raw string pointer, this avoids having to construct a fs::path each time its getting called (which is quite a lot!).
- Performed overall cleanup to code containing logic to override load paths. Mostly removing unnecessary copy constructions.
This commit is contained in:
Kawe Mazidjatari 2023-07-03 02:14:39 +02:00
parent 22f68ff22a
commit f6f3c7f9a2
11 changed files with 42 additions and 48 deletions

View File

@ -81,9 +81,6 @@ macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME WARNINGS_AS_ERRO
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/GS->
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/Gy>
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/fp:fast>
$<$<CXX_COMPILER_ID:MSVC>:/D_UNICODE>
$<$<CXX_COMPILER_ID:MSVC>:/DUNICODE>
)
endif()
endmacro()

View File

@ -273,9 +273,7 @@ void QuerySystemInfo()
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) // Only log the primary device.
{
char szDeviceName[128];
wcstombs(szDeviceName, dd.DeviceString, sizeof(szDeviceName));
DevMsg(eDLL_T::NONE, "%-25s: '%s'\n", "GPU model identifier", szDeviceName);
DevMsg(eDLL_T::NONE, "%-25s: '%s'\n", "GPU model identifier", dd.DeviceString);
}
}
#endif // !DEDICATED

View File

@ -446,7 +446,7 @@ void Mod_PreloadLevelPaks(const char* pszLevelName)
if (nPakId == INVALID_PAK_HANDLE)
Error(eDLL_T::ENGINE, NO_ERROR, "%s: unable to load pak '%s' results '%d'\n", __FUNCTION__, szPathBuffer, nPakId);
else
g_vLoadedPakHandle.push_back(nPakId);
g_vLoadedPakHandle.AddToTail(nPakId);
}
}
@ -462,7 +462,7 @@ void Mod_UnloadPakFile(void)
g_pakLoadApi->UnloadPak(it);
}
}
g_vLoadedPakHandle.clear();
g_vLoadedPakHandle.Purge();
g_vBadMDLHandles.clear();
}

View File

@ -38,29 +38,23 @@ bool CBaseFileSystem::VCheckDisk(const char* pszFilePath)
{
// Only load material files from the disk if the mode isn't zero,
// use -novpk to load valve materials from the disk.
if (FileSystem()->CheckVPKMode(0) && strstr(pszFilePath, ".vmt"))
if (FileSystem()->CheckVPKMode(0) && V_strstr(pszFilePath, ".vmt"))
{
return false;
}
std::string svFilePath = ConvertToWinPath(pszFilePath);
if (svFilePath.find("\\*\\") != string::npos)
{
// Erase '//*/'.
svFilePath.erase(0, 4);
}
fs::path filePath(svFilePath);
if (filePath.is_absolute())
if (V_IsAbsolutePath(pszFilePath))
{
// Skip absolute file paths.
return false;
}
// TODO: obtain 'mod' SearchPath's instead.
svFilePath.insert(0, "platform\\");
CUtlString filePath;
filePath.Format("platform/%s", pszFilePath);
filePath.FixSlashes();
filePath = filePath.Replace("\\*\\", "");
if (::FileExists(svFilePath) /*|| ::FileExists(pszFilePath)*/)
if (::FileExists(filePath.Get()))
{
return true;
}

View File

@ -3,7 +3,7 @@
/////////////////////////////////////////////////////////////////////////////
// Internals
BOOL IsBadReadPtrV2(void* ptr);
BOOL FileExists(const fs::path& svFilePath);
BOOL FileExists(LPCTSTR szPath);
BOOL FileEmpty(ifstream& pFile);
MODULEINFO GetModuleInfo(const char* szModule);

View File

@ -10,7 +10,11 @@
#include "rtech/rtech_game.h"
#include "rtech/rtech_utils.h"
vector<RPakHandle_t> g_vLoadedPakHandle;
// Pak handles that have been loaded with the level
// from within the level settings KV (located in
// scripts/levels/settings/*.kv). On level unload,
// each pak listed in this vector gets unloaded.
CUtlVector<RPakHandle_t> g_vLoadedPakHandle;
//-----------------------------------------------------------------------------
// Purpose: load user-requested pak files on-demand
@ -23,10 +27,14 @@ vector<RPakHandle_t> g_vLoadedPakHandle;
RPakHandle_t CPakFile::LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc, int nIdx, bool bUnk)
{
RPakHandle_t pakHandle = INVALID_PAK_HANDLE;
string svPakFileModPath = "paks\\Win32\\" + string(szPakFileName);
string svPakFilePathBase = "paks\\Win64\\" + string(szPakFileName);
if (FileExists(svPakFileModPath) || FileExists(svPakFilePathBase))
CUtlString pakBasePath;
CUtlString pakOverridePath;
pakBasePath.Format(PLATFORM_PAK_PATH "%s", szPakFileName);
pakOverridePath.Format(PLATFORM_PAK_OVERRIDE_PATH "%s", szPakFileName);
if (FileExists(pakOverridePath.Get()) || FileExists(pakBasePath.Get()))
{
DevMsg(eDLL_T::RTECH, "Loading pak file: '%s'\n", szPakFileName);
pakHandle = CPakFile_LoadAsync(szPakFileName, pMalloc, nIdx, bUnk);

View File

@ -47,7 +47,7 @@ public:
};
extern CPakFile* g_pakLoadApi;
extern vector<RPakHandle_t> g_vLoadedPakHandle;
extern CUtlVector<RPakHandle_t> g_vLoadedPakHandle;
///////////////////////////////////////////////////////////////////////////////
class V_RTechGame : public IDetour

View File

@ -498,28 +498,27 @@ void** RTech::LoadShaderSet(void** VTablePtr)
//----------------------------------------------------------------------------------
int32_t RTech::OpenFile(const CHAR* szFilePath, void* unused, LONGLONG* fileSizeOut)
{
string svModFile = szFilePath;
string svBaseFile = szFilePath;
const string svModDir = "paks\\Win32\\";
const string svBaseDir = "paks\\Win64\\";
const CHAR* szFileToLoad = szFilePath;
CUtlString pakBasePath(szFilePath);
if (strstr(ConvertToWinPath(szFilePath).c_str(), svBaseDir.c_str()))
if (pakBasePath.Find(PLATFORM_PAK_PATH) != -1)
{
svBaseFile.erase(0, 11); // Erase 'base_dir'.
svModFile = svModDir + svBaseFile; // Prepend 'mod_dir'.
pakBasePath = pakBasePath.Replace(PLATFORM_PAK_PATH, PLATFORM_PAK_OVERRIDE_PATH);
if (!FileExists(svModFile))
if (FileExists(pakBasePath.Get()))
{
svModFile = szFilePath;
szFileToLoad = pakBasePath.Get();
}
}
const HANDLE hFile = CreateFileA(svModFile.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, 0, OPEN_EXISTING, FILE_SUPPORTS_GHOSTING, 0);
const HANDLE hFile = CreateFileA(szFileToLoad, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_DELETE, 0, OPEN_EXISTING, FILE_SUPPORTS_GHOSTING, 0);
if (hFile == INVALID_HANDLE_VALUE)
return -1;
if (rtech_debug->GetBool())
DevMsg(eDLL_T::RTECH, "Opened file: '%s'\n", svModFile.c_str());
DevMsg(eDLL_T::RTECH, "Opened file: '%s'\n", szFileToLoad);
if (fileSizeOut)
{

View File

@ -181,9 +181,7 @@ void CCrashHandler::FormatSystemInfo()
if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) // The primary device is the only relevant device.
{
char szDeviceName[128];
wcstombs(szDeviceName, dd.DeviceString, sizeof(szDeviceName));
m_svBuffer.append(Format("\tgpu_model = \"%s\"\n", szDeviceName));
m_svBuffer.append(Format("\tgpu_model = \"%s\"\n", dd.DeviceString));
m_svBuffer.append(Format("\tgpu_flags = 0x%08X // primary device\n", dd.StateFlags));
}
}

View File

@ -7,9 +7,12 @@
///////////////////////////////////////////////////////////////////////////////
// For checking if a specific file exists.
BOOL FileExists(const fs::path& svFilePath)
BOOL FileExists(LPCTSTR szPath)
{
return fs::exists(svFilePath);
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
///////////////////////////////////////////////////////////////////////////////

View File

@ -108,11 +108,8 @@ void CNetAdr::ToAdrinfo(addrinfo* pHint) const
if (results != 0)
{
WCHAR* wszError = gai_strerror(results);
_bstr_t bStr(wszError);
const char* pszError = bStr;
Warning(eDLL_T::ENGINE, "Address info translation failed: (%s)\n", pszError);
CHAR* wszError = gai_strerror(results);
Warning(eDLL_T::ENGINE, "Address info translation failed: (%s)\n", wszError);
}
}