Move filesystem natives from Core to Logic (bug 5606, r=psychonic).
--HG-- rename : core/smn_filesystem.cpp => core/logic/smn_filesystem.cpp
This commit is contained in:
parent
7814acb9f8
commit
5f0a55057e
@ -64,7 +64,6 @@ for i in SM.sdkInfo:
|
|||||||
'sourcemm_api.cpp',
|
'sourcemm_api.cpp',
|
||||||
'ChatTriggers.cpp',
|
'ChatTriggers.cpp',
|
||||||
'NativeOwner.cpp',
|
'NativeOwner.cpp',
|
||||||
'smn_filesystem.cpp',
|
|
||||||
'smn_player.cpp',
|
'smn_player.cpp',
|
||||||
'sourcemod.cpp',
|
'sourcemod.cpp',
|
||||||
'concmd_cleaner.cpp',
|
'concmd_cleaner.cpp',
|
||||||
|
@ -37,9 +37,12 @@
|
|||||||
#include "LibrarySys.h"
|
#include "LibrarySys.h"
|
||||||
#include "TimerSys.h"
|
#include "TimerSys.h"
|
||||||
#include <sourcemod_version.h>
|
#include <sourcemod_version.h>
|
||||||
|
#include "logic_bridge.h"
|
||||||
|
|
||||||
Logger g_Logger;
|
Logger g_Logger;
|
||||||
|
|
||||||
|
SH_DECL_HOOK1_void(IVEngineServer, LogPrint, SH_NOATTRIB, false, const char *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* :TODO: This should be creating the log folder if it doesn't exist
|
* :TODO: This should be creating the log folder if it doesn't exist
|
||||||
*/
|
*/
|
||||||
@ -91,14 +94,27 @@ ConfigResult Logger::OnSourceModConfigChanged(const char *key,
|
|||||||
return ConfigResult_Ignore;
|
return ConfigResult_Ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void HookLogPrint(const char *message)
|
||||||
|
{
|
||||||
|
g_in_game_log_hook = true;
|
||||||
|
bool stopped = logicore.OnLogPrint(message);
|
||||||
|
g_in_game_log_hook = false;
|
||||||
|
|
||||||
|
if (stopped)
|
||||||
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
|
}
|
||||||
|
|
||||||
void Logger::OnSourceModStartup(bool late)
|
void Logger::OnSourceModStartup(bool late)
|
||||||
{
|
{
|
||||||
InitLogger(m_Mode);
|
InitLogger(m_Mode);
|
||||||
|
|
||||||
|
SH_ADD_HOOK_STATICFUNC(IVEngineServer, LogPrint, engine, HookLogPrint, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::OnSourceModAllShutdown()
|
void Logger::OnSourceModAllShutdown()
|
||||||
{
|
{
|
||||||
CloseLogger();
|
CloseLogger();
|
||||||
|
SH_REMOVE_HOOK_STATICFUNC(IVEngineServer, LogPrint, engine, HookLogPrint, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::OnSourceModLevelChange(const char *mapName)
|
void Logger::OnSourceModLevelChange(const char *mapName)
|
||||||
@ -305,6 +321,14 @@ void Logger::LogToFileOnlyEx(FILE *fp, const char *msg, va_list ap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Logger::LogMessage(const char *vafmt, ...)
|
void Logger::LogMessage(const char *vafmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, vafmt);
|
||||||
|
LogMessageEx(vafmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::LogMessageEx(const char *vafmt, va_list ap)
|
||||||
{
|
{
|
||||||
if (!m_Active)
|
if (!m_Active)
|
||||||
{
|
{
|
||||||
@ -313,10 +337,7 @@ void Logger::LogMessage(const char *vafmt, ...)
|
|||||||
|
|
||||||
if (m_Mode == LoggingMode_Game)
|
if (m_Mode == LoggingMode_Game)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
va_start(ap, vafmt);
|
|
||||||
_PrintToGameLog(vafmt, ap);
|
_PrintToGameLog(vafmt, ap);
|
||||||
va_end(ap);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,10 +385,7 @@ void Logger::LogMessage(const char *vafmt, ...)
|
|||||||
strftime(date, sizeof(date), "%m/%d/%Y - %H:%M:%S", curtime);
|
strftime(date, sizeof(date), "%m/%d/%Y - %H:%M:%S", curtime);
|
||||||
fprintf(fp, "L %s: SourceMod log file session started (file \"L%04d%02d%02d.log\") (Version \"%s\")\n", date, curtime->tm_year + 1900, curtime->tm_mon + 1, curtime->tm_mday, SM_VERSION_STRING);
|
fprintf(fp, "L %s: SourceMod log file session started (file \"L%04d%02d%02d.log\") (Version \"%s\")\n", date, curtime->tm_year + 1900, curtime->tm_mon + 1, curtime->tm_mday, SM_VERSION_STRING);
|
||||||
}
|
}
|
||||||
va_list ap;
|
|
||||||
va_start(ap, vafmt);
|
|
||||||
LogToOpenFileEx(fp, vafmt, ap);
|
LogToOpenFileEx(fp, vafmt, ap);
|
||||||
va_end(ap);
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
} else {
|
} else {
|
||||||
goto print_error;
|
goto print_error;
|
||||||
|
@ -74,6 +74,7 @@ public:
|
|||||||
void EnableLogging();
|
void EnableLogging();
|
||||||
void DisableLogging();
|
void DisableLogging();
|
||||||
void LogMessage(const char *msg, ...);
|
void LogMessage(const char *msg, ...);
|
||||||
|
void LogMessageEx(const char *msg, va_list ap);
|
||||||
void LogError(const char *msg, ...);
|
void LogError(const char *msg, ...);
|
||||||
void LogErrorEx(const char *msg, va_list ap);
|
void LogErrorEx(const char *msg, va_list ap);
|
||||||
void LogFatal(const char *msg, ...);
|
void LogFatal(const char *msg, ...);
|
||||||
|
@ -38,6 +38,7 @@ files = [
|
|||||||
'MemoryUtils.cpp',
|
'MemoryUtils.cpp',
|
||||||
'smn_admin.cpp',
|
'smn_admin.cpp',
|
||||||
'smn_banning.cpp',
|
'smn_banning.cpp',
|
||||||
|
'smn_filesystem.cpp',
|
||||||
'stringutil.cpp',
|
'stringutil.cpp',
|
||||||
'Translator.cpp',
|
'Translator.cpp',
|
||||||
'PhraseCollection.cpp',
|
'PhraseCollection.cpp',
|
||||||
|
@ -70,6 +70,9 @@ static IGameConfig *GetCoreGameConfig()
|
|||||||
return g_pGameConf;
|
return g_pGameConf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Defined in smn_filesystem.cpp.
|
||||||
|
extern bool OnLogPrint(const char *msg);
|
||||||
|
|
||||||
static sm_logic_t logic =
|
static sm_logic_t logic =
|
||||||
{
|
{
|
||||||
NULL,
|
NULL,
|
||||||
@ -82,7 +85,8 @@ static sm_logic_t logic =
|
|||||||
UTIL_ReplaceAll,
|
UTIL_ReplaceAll,
|
||||||
UTIL_ReplaceEx,
|
UTIL_ReplaceEx,
|
||||||
UTIL_DecodeHexString,
|
UTIL_DecodeHexString,
|
||||||
GetCoreGameConfig
|
GetCoreGameConfig,
|
||||||
|
OnLogPrint
|
||||||
};
|
};
|
||||||
|
|
||||||
static void logic_init(const sm_core_t* core, sm_logic_t* _logic)
|
static void logic_init(const sm_core_t* core, sm_logic_t* _logic)
|
||||||
|
@ -105,6 +105,10 @@ struct sm_core_t
|
|||||||
unsigned int (*strncopy)(char*, const char*, size_t);
|
unsigned int (*strncopy)(char*, const char*, size_t);
|
||||||
char * (*TrimWhitespace)(char *, size_t &);
|
char * (*TrimWhitespace)(char *, size_t &);
|
||||||
void (*LogError)(const char*, ...);
|
void (*LogError)(const char*, ...);
|
||||||
|
void (*Log)(const char*, ...);
|
||||||
|
void (*LogToFile)(FILE *fp, const char*, ...);
|
||||||
|
void (*LogToGame)(const char *message);
|
||||||
|
bool (*FileExists)(const char *path);
|
||||||
const char * (*GetCvarString)(ConVar*);
|
const char * (*GetCvarString)(ConVar*);
|
||||||
size_t (*Format)(char*, size_t, const char*, ...);
|
size_t (*Format)(char*, size_t, const char*, ...);
|
||||||
void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
|
void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
|
||||||
@ -136,6 +140,7 @@ struct sm_logic_t
|
|||||||
char *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool);
|
char *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool);
|
||||||
size_t (*DecodeHexString)(unsigned char *, size_t, const char *);
|
size_t (*DecodeHexString)(unsigned char *, size_t, const char *);
|
||||||
IGameConfig * (*GetCoreGameConfig)();
|
IGameConfig * (*GetCoreGameConfig)();
|
||||||
|
bool (*OnLogPrint)(const char *msg); // true to supercede
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic);
|
typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic);
|
||||||
|
@ -30,16 +30,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "sm_globals.h"
|
#include <IHandleSys.h>
|
||||||
#include "HandleSys.h"
|
#include <ILibrarySys.h>
|
||||||
#include "LibrarySys.h"
|
#include <IPluginSys.h>
|
||||||
#include "sm_stringutil.h"
|
#include <IForwardSys.h>
|
||||||
#include "Logger.h"
|
#include <ISourceMod.h>
|
||||||
#include "PluginSys.h"
|
#include <ITranslator.h>
|
||||||
#include "sourcemm_api.h"
|
#include "common_logic.h"
|
||||||
#include "ForwardSys.h"
|
|
||||||
|
|
||||||
SH_DECL_HOOK1_void(IVEngineServer, LogPrint, SH_NOATTRIB, false, const char *);
|
|
||||||
|
|
||||||
HandleType_t g_FileType;
|
HandleType_t g_FileType;
|
||||||
HandleType_t g_DirType;
|
HandleType_t g_DirType;
|
||||||
@ -53,26 +50,20 @@ class FileNatives :
|
|||||||
public:
|
public:
|
||||||
FileNatives()
|
FileNatives()
|
||||||
{
|
{
|
||||||
m_bIsLoggingHooked = false;
|
|
||||||
}
|
}
|
||||||
virtual void OnSourceModAllInitialized()
|
virtual void OnSourceModAllInitialized()
|
||||||
{
|
{
|
||||||
g_FileType = g_HandleSys.CreateType("File", this, 0, NULL, NULL, g_pCoreIdent, NULL);
|
g_FileType = handlesys->CreateType("File", this, 0, NULL, NULL, g_pCoreIdent, NULL);
|
||||||
g_DirType = g_HandleSys.CreateType("Directory", this, 0, NULL, NULL, g_pCoreIdent, NULL);
|
g_DirType = handlesys->CreateType("Directory", this, 0, NULL, NULL, g_pCoreIdent, NULL);
|
||||||
g_pLogHook = g_Forwards.CreateForwardEx(NULL, ET_Hook, 1, NULL, Param_String);
|
g_pLogHook = forwardsys->CreateForwardEx(NULL, ET_Hook, 1, NULL, Param_String);
|
||||||
g_PluginSys.AddPluginsListener(this);
|
pluginsys->AddPluginsListener(this);
|
||||||
}
|
}
|
||||||
virtual void OnSourceModShutdown()
|
virtual void OnSourceModShutdown()
|
||||||
{
|
{
|
||||||
g_PluginSys.RemovePluginsListener(this);
|
pluginsys->RemovePluginsListener(this);
|
||||||
if (m_bIsLoggingHooked)
|
forwardsys->ReleaseForward(g_pLogHook);
|
||||||
{
|
handlesys->RemoveType(g_DirType, g_pCoreIdent);
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false);
|
handlesys->RemoveType(g_FileType, g_pCoreIdent);
|
||||||
m_bIsLoggingHooked = false;
|
|
||||||
}
|
|
||||||
g_Forwards.ReleaseForward(g_pLogHook);
|
|
||||||
g_HandleSys.RemoveType(g_DirType, g_pCoreIdent);
|
|
||||||
g_HandleSys.RemoveType(g_FileType, g_pCoreIdent);
|
|
||||||
g_DirType = 0;
|
g_DirType = 0;
|
||||||
g_FileType = 0;
|
g_FileType = 0;
|
||||||
}
|
}
|
||||||
@ -86,57 +77,31 @@ public:
|
|||||||
else if (type == g_DirType)
|
else if (type == g_DirType)
|
||||||
{
|
{
|
||||||
IDirectory *pDir = (IDirectory *)object;
|
IDirectory *pDir = (IDirectory *)object;
|
||||||
g_LibSys.CloseDirectory(pDir);
|
libsys->CloseDirectory(pDir);
|
||||||
}
|
|
||||||
}
|
|
||||||
virtual void OnPluginDestroyed(IPlugin *plugin)
|
|
||||||
{
|
|
||||||
if (m_bIsLoggingHooked && g_pLogHook->GetFunctionCount() == 0)
|
|
||||||
{
|
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false);
|
|
||||||
m_bIsLoggingHooked = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void AddLogHook(IPluginFunction *pFunc)
|
virtual void AddLogHook(IPluginFunction *pFunc)
|
||||||
{
|
{
|
||||||
if (!m_bIsLoggingHooked)
|
|
||||||
{
|
|
||||||
SH_ADD_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false);
|
|
||||||
m_bIsLoggingHooked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_pLogHook->AddFunction(pFunc);
|
g_pLogHook->AddFunction(pFunc);
|
||||||
}
|
}
|
||||||
virtual void RemoveLogHook(IPluginFunction *pFunc)
|
virtual void RemoveLogHook(IPluginFunction *pFunc)
|
||||||
{
|
{
|
||||||
g_pLogHook->RemoveFunction(pFunc);
|
g_pLogHook->RemoveFunction(pFunc);
|
||||||
|
|
||||||
if (m_bIsLoggingHooked && g_pLogHook->GetFunctionCount() == 0)
|
|
||||||
{
|
|
||||||
SH_REMOVE_HOOK_MEMFUNC(IVEngineServer, LogPrint, engine, this, &FileNatives::LogPrint, false);
|
|
||||||
m_bIsLoggingHooked = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
virtual void LogPrint(const char *msg)
|
virtual bool LogPrint(const char *msg)
|
||||||
{
|
{
|
||||||
cell_t result;
|
cell_t result = 0;
|
||||||
|
|
||||||
result = 0;
|
|
||||||
|
|
||||||
g_in_game_log_hook = true;
|
|
||||||
g_pLogHook->PushString(msg);
|
g_pLogHook->PushString(msg);
|
||||||
g_pLogHook->Execute(&result);
|
g_pLogHook->Execute(&result);
|
||||||
g_in_game_log_hook = false;
|
return result >= Pl_Handled;
|
||||||
|
|
||||||
if (result >= Pl_Handled)
|
|
||||||
{
|
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
private:
|
|
||||||
bool m_bIsLoggingHooked;
|
|
||||||
} s_FileNatives;
|
} s_FileNatives;
|
||||||
|
|
||||||
|
bool OnLogPrint(const char *msg)
|
||||||
|
{
|
||||||
|
return s_FileNatives.LogPrint(msg);
|
||||||
|
}
|
||||||
|
|
||||||
static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
char *path;
|
char *path;
|
||||||
@ -148,15 +113,15 @@ static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", path);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", path);
|
||||||
|
|
||||||
IDirectory *pDir = g_LibSys.OpenDirectory(realpath);
|
IDirectory *pDir = libsys->OpenDirectory(realpath);
|
||||||
if (!pDir)
|
if (!pDir)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_HandleSys.CreateHandle(g_DirType, pDir, pContext->GetIdentity(), g_pCoreIdent, NULL);
|
return handlesys->CreateHandle(g_DirType, pDir, pContext->GetIdentity(), g_pCoreIdent, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_ReadDirEntry(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_ReadDirEntry(IPluginContext *pContext, const cell_t *params)
|
||||||
@ -170,7 +135,7 @@ static cell_t sm_ReadDirEntry(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_DirType, &sec, (void **)&pDir))
|
if ((herr=handlesys->ReadHandle(hndl, g_DirType, &sec, (void **)&pDir))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -226,7 +191,7 @@ static cell_t sm_OpenFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
|
|
||||||
FILE *pFile = fopen(realpath, mode);
|
FILE *pFile = fopen(realpath, mode);
|
||||||
if (!pFile)
|
if (!pFile)
|
||||||
@ -234,7 +199,7 @@ static cell_t sm_OpenFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_HandleSys.CreateHandle(g_FileType, pFile, pContext->GetIdentity(), g_pCoreIdent, NULL);
|
return handlesys->CreateHandle(g_FileType, pFile, pContext->GetIdentity(), g_pCoreIdent, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_DeleteFile(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_DeleteFile(IPluginContext *pContext, const cell_t *params)
|
||||||
@ -248,7 +213,7 @@ static cell_t sm_DeleteFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
|
|
||||||
return (unlink(realpath)) ? 0 : 1;
|
return (unlink(realpath)) ? 0 : 1;
|
||||||
}
|
}
|
||||||
@ -264,7 +229,7 @@ static cell_t sm_ReadFileLine(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -295,7 +260,7 @@ static cell_t sm_IsEndOfFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -314,7 +279,7 @@ static cell_t sm_FileSeek(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -335,7 +300,7 @@ static cell_t sm_FilePosition(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -356,11 +321,11 @@ static cell_t sm_FileExists(IPluginContext *pContext, const cell_t *params)
|
|||||||
|
|
||||||
if (params[0] >= 2 && params[2] == 1)
|
if (params[0] >= 2 && params[2] == 1)
|
||||||
{
|
{
|
||||||
return basefilesystem->FileExists(name) ? 1 : 0;
|
return smcore.FileExists(name) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
struct _stat s;
|
struct _stat s;
|
||||||
if (_stat(realpath, &s) != 0)
|
if (_stat(realpath, &s) != 0)
|
||||||
@ -402,9 +367,9 @@ static cell_t sm_RenameFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char new_realpath[PLATFORM_MAX_PATH];
|
char new_realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, new_realpath, sizeof(new_realpath), "%s", newpath);
|
g_pSM->BuildPath(Path_Game, new_realpath, sizeof(new_realpath), "%s", newpath);
|
||||||
char old_realpath[PLATFORM_MAX_PATH];
|
char old_realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, old_realpath, sizeof(old_realpath), "%s", oldpath);
|
g_pSM->BuildPath(Path_Game, old_realpath, sizeof(old_realpath), "%s", oldpath);
|
||||||
|
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
return (MoveFileA(old_realpath, new_realpath)) ? 1 : 0;
|
return (MoveFileA(old_realpath, new_realpath)) ? 1 : 0;
|
||||||
@ -424,7 +389,7 @@ static cell_t sm_DirExists(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
struct _stat s;
|
struct _stat s;
|
||||||
if (_stat(realpath, &s) != 0)
|
if (_stat(realpath, &s) != 0)
|
||||||
@ -461,7 +426,7 @@ static cell_t sm_FileSize(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
struct _stat s;
|
struct _stat s;
|
||||||
if (_stat(realpath, &s) != 0)
|
if (_stat(realpath, &s) != 0)
|
||||||
@ -493,7 +458,7 @@ static cell_t sm_CreateDirectory(IPluginContext *pContext, const cell_t *params)
|
|||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
pContext->LocalToString(params[1], &name);
|
pContext->LocalToString(params[1], &name);
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
|
|
||||||
#if defined PLATFORM_WINDOWS
|
#if defined PLATFORM_WINDOWS
|
||||||
return mkdir(realpath) == 0;
|
return mkdir(realpath) == 0;
|
||||||
@ -513,7 +478,7 @@ static cell_t sm_RemoveDir(IPluginContext *pContext, const cell_t *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
|
|
||||||
return (rmdir(realpath)) ? 0 : 1;
|
return (rmdir(realpath)) ? 0 : 1;
|
||||||
}
|
}
|
||||||
@ -528,7 +493,7 @@ static cell_t sm_WriteFileLine(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -544,7 +509,7 @@ static cell_t sm_WriteFileLine(IPluginContext *pContext, const cell_t *params)
|
|||||||
|
|
||||||
char buffer[2048];
|
char buffer[2048];
|
||||||
int arg = 3;
|
int arg = 3;
|
||||||
atcprintf(buffer, sizeof(buffer), fmt, pContext, params, &arg);
|
smcore.atcprintf(buffer, sizeof(buffer), fmt, pContext, params, &arg);
|
||||||
fprintf(pFile, "%s\n", buffer);
|
fprintf(pFile, "%s\n", buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -560,7 +525,7 @@ static cell_t sm_FlushFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -576,17 +541,17 @@ static cell_t sm_BuildPath(IPluginContext *pContext, const cell_t *params)
|
|||||||
pContext->LocalToString(params[2], &buffer);
|
pContext->LocalToString(params[2], &buffer);
|
||||||
pContext->LocalToString(params[4], &fmt);
|
pContext->LocalToString(params[4], &fmt);
|
||||||
|
|
||||||
atcprintf(path, sizeof(path), fmt, pContext, params, &arg);
|
smcore.atcprintf(path, sizeof(path), fmt, pContext, params, &arg);
|
||||||
|
|
||||||
return g_SourceMod.BuildPath(Path_SM_Rel, buffer, params[3], "%s", path);
|
return g_pSM->BuildPath(Path_SM_Rel, buffer, params[3], "%s", path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_LogToGame(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_LogToGame(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
g_pSM->SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
size_t len = g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
size_t len = g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
||||||
|
|
||||||
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
@ -602,43 +567,43 @@ static cell_t sm_LogToGame(IPluginContext *pContext, const cell_t *params)
|
|||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine_LogPrintWrapper(buffer);
|
smcore.LogToGame(buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_LogMessage(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_LogMessage(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
g_pSM->SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
||||||
|
|
||||||
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlugin *pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext());
|
IPlugin *pPlugin = pluginsys->FindPluginByContext(pContext->GetContext());
|
||||||
g_Logger.LogMessage("[%s] %s", pPlugin->GetFilename(), buffer);
|
smcore.Log("[%s] %s", pPlugin->GetFilename(), buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_LogError(IPluginContext *pContext, const cell_t *params)
|
static cell_t sm_LogError(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
g_pSM->SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 1);
|
||||||
|
|
||||||
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlugin *pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext());
|
IPlugin *pPlugin = pluginsys->FindPluginByContext(pContext->GetContext());
|
||||||
g_Logger.LogError("[%s] %s", pPlugin->GetFilename(), buffer);
|
smcore.LogError("[%s] %s", pPlugin->GetFilename(), buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -655,9 +620,9 @@ static cell_t sm_GetFileTime(IPluginContext *pContext, const cell_t *params)
|
|||||||
|
|
||||||
time_t time_val;
|
time_t time_val;
|
||||||
char realpath[PLATFORM_MAX_PATH];
|
char realpath[PLATFORM_MAX_PATH];
|
||||||
g_SourceMod.BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", name);
|
||||||
|
|
||||||
if (!g_LibSys.FileTime(realpath, (FileTimeType)params[2], &time_val))
|
if (!libsys->FileTime(realpath, (FileTimeType)params[2], &time_val))
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -675,23 +640,23 @@ static cell_t sm_LogToOpenFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[2048];
|
char buffer[2048];
|
||||||
g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
g_pSM->SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
||||||
g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 2);
|
g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 2);
|
||||||
|
|
||||||
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlugin *pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext());
|
IPlugin *pPlugin = pluginsys->FindPluginByContext(pContext->GetContext());
|
||||||
g_Logger.LogToOpenFile(pFile, "[%s] %s", pPlugin->GetFilename(), buffer);
|
smcore.LogToFile(pFile, "[%s] %s", pPlugin->GetFilename(), buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -706,22 +671,22 @@ static cell_t sm_LogToOpenFileEx(IPluginContext *pContext, const cell_t *params)
|
|||||||
sec.pOwner = NULL;
|
sec.pOwner = NULL;
|
||||||
sec.pIdentity = g_pCoreIdent;
|
sec.pIdentity = g_pCoreIdent;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[2048];
|
char buffer[2048];
|
||||||
g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
g_pSM->SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);
|
||||||
g_SourceMod.FormatString(buffer, sizeof(buffer), pContext, params, 2);
|
g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 2);
|
||||||
|
|
||||||
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
if (pContext->GetLastNativeError() != SP_ERROR_NONE)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Logger.LogToOpenFile(pFile, "%s", buffer);
|
smcore.LogToFile(pFile, "%s", buffer);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -734,7 +699,7 @@ static cell_t sm_ReadFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
FILE *pFile;
|
FILE *pFile;
|
||||||
size_t read = 0;
|
size_t read = 0;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -793,7 +758,7 @@ static cell_t sm_ReadFileString(IPluginContext *pContext, const cell_t *params)
|
|||||||
FILE *pFile;
|
FILE *pFile;
|
||||||
cell_t num_read = 0;
|
cell_t num_read = 0;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -861,7 +826,7 @@ static cell_t sm_WriteFile(IPluginContext *pContext, const cell_t *params)
|
|||||||
HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent);
|
HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent);
|
||||||
FILE *pFile;
|
FILE *pFile;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
||||||
@ -915,7 +880,7 @@ static cell_t sm_WriteFileString(IPluginContext *pContext, const cell_t *params)
|
|||||||
HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent);
|
HandleSecurity sec(pContext->GetIdentity(), g_pCoreIdent);
|
||||||
FILE *pFile;
|
FILE *pFile;
|
||||||
|
|
||||||
if ((herr=g_HandleSys.ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
if ((herr=handlesys->ReadHandle(hndl, g_FileType, &sec, (void **)&pFile))
|
||||||
!= HandleError_None)
|
!= HandleError_None)
|
||||||
{
|
{
|
||||||
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr);
|
@ -51,19 +51,19 @@
|
|||||||
#include "HalfLife2.h"
|
#include "HalfLife2.h"
|
||||||
#include "CoreConfig.h"
|
#include "CoreConfig.h"
|
||||||
|
|
||||||
#if defined _WIN32
|
#if defined _WIN32
|
||||||
#define MATCHMAKINGDS_SUFFIX ""
|
#define MATCHMAKINGDS_SUFFIX ""
|
||||||
#define MATCHMAKINGDS_EXT "dll"
|
#define MATCHMAKINGDS_EXT "dll"
|
||||||
#elif defined __APPLE__
|
#elif defined __APPLE__
|
||||||
#define MATCHMAKINGDS_SUFFIX ""
|
#define MATCHMAKINGDS_SUFFIX ""
|
||||||
#define MATCHMAKINGDS_EXT "dylib"
|
#define MATCHMAKINGDS_EXT "dylib"
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
#if SOURCE_ENGINE < SE_LEFT4DEAD2
|
#if SOURCE_ENGINE < SE_LEFT4DEAD2
|
||||||
#define MATCHMAKINGDS_SUFFIX "_i486"
|
#define MATCHMAKINGDS_SUFFIX "_i486"
|
||||||
#else
|
#else
|
||||||
#define MATCHMAKINGDS_SUFFIX ""
|
#define MATCHMAKINGDS_SUFFIX ""
|
||||||
#endif
|
#endif
|
||||||
#define MATCHMAKINGDS_EXT "so"
|
#define MATCHMAKINGDS_EXT "so"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static ILibrary *g_pLogic = NULL;
|
static ILibrary *g_pLogic = NULL;
|
||||||
@ -109,6 +109,32 @@ static void log_error(const char *fmt, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void log_message(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
g_Logger.LogMessageEx(fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void log_to_file(FILE *fp, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
g_Logger.LogToOpenFileEx(fp, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void log_to_game(const char *message)
|
||||||
|
{
|
||||||
|
Engine_LogPrintWrapper(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool file_exists(const char *path)
|
||||||
|
{
|
||||||
|
return basefilesystem->FileExists(path);
|
||||||
|
}
|
||||||
|
|
||||||
static void generate_error(IPluginContext *ctx, cell_t func_idx, int err, const char *fmt, ...)
|
static void generate_error(IPluginContext *ctx, cell_t func_idx, int err, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -214,6 +240,10 @@ static sm_core_t core_bridge =
|
|||||||
strncopy,
|
strncopy,
|
||||||
UTIL_TrimWhitespace,
|
UTIL_TrimWhitespace,
|
||||||
log_error,
|
log_error,
|
||||||
|
log_message,
|
||||||
|
log_to_file,
|
||||||
|
log_to_game,
|
||||||
|
file_exists,
|
||||||
get_cvar_string,
|
get_cvar_string,
|
||||||
UTIL_Format,
|
UTIL_Format,
|
||||||
generate_error,
|
generate_error,
|
||||||
|
Loading…
Reference in New Issue
Block a user