FileSystem improvements

* Added method 'FPrintf'.
* Shifted indexes back by 2 if <GAMEDLL_S3 (Anything <S3 doesn't have the 2 FeatureFlags initialization methods which shifts everything past index 10 back by 2).
This commit is contained in:
Kawe Mazidjatari 2022-08-12 15:51:04 +02:00
parent aa9e7f25ed
commit 9bf7660138
3 changed files with 39 additions and 5 deletions

View File

@ -1,5 +1,6 @@
#pragma once
typedef void* FileHandle_t;
#define FILESYSTEM_INVALID_HANDLE ( FileHandle_t )0
enum class SearchPathAdd_t : int
{

View File

@ -3,7 +3,7 @@
#include "filesystem/filesystem.h"
//-----------------------------------------------------------------------------
//
// Singleton FileSystem
//-----------------------------------------------------------------------------
CFileSystem_Stdio* FileSystem()
{
@ -18,7 +18,7 @@ CFileSystem_Stdio* FileSystem()
//-----------------------------------------------------------------------------
void IFileSystem::AddSearchPath(const char* pPath, const char* pPathID, SearchPathAdd_t addType)
{
const int index = 12;
const int index = (12 - FS_VFTABLE_SHIFT);
CallVFunc<void>(index, this, pPath, pPathID, addType);
}
@ -31,10 +31,34 @@ void IFileSystem::AddSearchPath(const char* pPath, const char* pPathID, SearchPa
//-----------------------------------------------------------------------------
bool IFileSystem::RemoveSearchPath(const char* pPath, const char* pPathID)
{
const int index = 13;
const int index = (13 - FS_VFTABLE_SHIFT);
return CallVFunc<bool>(index, this, pPath, pPathID);
}
//-----------------------------------------------------------------------------
// Purpose: print to file.
// Input : file -
// *pFormat -
// ... -
// Output : number of bytes written.
//-----------------------------------------------------------------------------
int IFileSystem::FPrintf(FileHandle_t file, const char* pFormat, ...) FMTFUNCTION(3, 4)
{
const int index = (29 - FS_VFTABLE_SHIFT);
char buf[65560];
{/////////////////////////////
va_list args{};
va_start(args, pFormat);
vsnprintf(buf, sizeof(buf), pFormat, args);
buf[sizeof(buf) - 1] = '\0';
va_end(args);
}/////////////////////////////
return CallVFunc<int>(index, this, file, buf);
}
//-----------------------------------------------------------------------------
// Purpose: read file from cache.
// Input : *pPath -
@ -43,7 +67,7 @@ bool IFileSystem::RemoveSearchPath(const char* pPath, const char* pPathID)
//-----------------------------------------------------------------------------
bool IFileSystem::ReadFromCache(const char* pPath, void* pResult)
{
const int index = 76;
const int index = (76 - FS_VFTABLE_SHIFT);
return CallVFunc<bool>(index, this, pPath, pResult);
}
@ -54,7 +78,7 @@ bool IFileSystem::ReadFromCache(const char* pPath, void* pResult)
//-----------------------------------------------------------------------------
VPKData_t* IFileSystem::MountVPK(const char* pPath)
{
const int index = 92;
const int index = (92 - FS_VFTABLE_SHIFT);
return CallVFunc<VPKData_t*>(index, this, pPath);
}

View File

@ -6,11 +6,20 @@
#define GAMEINFOPATH_TOKEN "|gameinfo_path|"
#define BASESOURCEPATHS_TOKEN "|all_source_engine_paths|"
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2)
constexpr int FS_VFTABLE_SHIFT = 2;
#else
constexpr int FS_VFTABLE_SHIFT = 0;
#endif
class IFileSystem
{
public:
void AddSearchPath(const char* pPath, const char* pPathID, SearchPathAdd_t addType);
bool RemoveSearchPath(const char* pPath, const char* pPathID);
int FPrintf(FileHandle_t file, const char* pFormat, ...) FMTFUNCTION(3, 4);
bool ReadFromCache(const char* pPath, void* pResult);
VPKData_t* MountVPK(const char* pVpkPath);
};