diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index b61abcd9..31874ebe 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -670,6 +670,26 @@ void SourceModBase::ProcessGameFrameHooks(bool simulating) } } +size_t SourceModBase::Format(char *buffer, size_t maxlength, const char *fmt, ...) +{ + size_t len; + va_list ap; + + va_start(ap, fmt); + len = FormatArgs(buffer, maxlength, fmt, ap); + va_end(ap); + + return len; +} + +size_t SourceModBase::FormatArgs(char *buffer, + size_t maxlength, + const char *fmt, + va_list ap) +{ + return UTIL_FormatArgs(buffer, maxlength, fmt, ap); +} + SMGlobalClass *SMGlobalClass::head = NULL; SMGlobalClass::SMGlobalClass() diff --git a/core/sourcemod.h b/core/sourcemod.h index ac826be6..2dcc292f 100644 --- a/core/sourcemod.h +++ b/core/sourcemod.h @@ -129,6 +129,8 @@ public: // ISourceMod void AddGameFrameHook(GAME_FRAME_HOOK hook); void RemoveGameFrameHook(GAME_FRAME_HOOK hook); void ProcessGameFrameHooks(bool simulating); + size_t Format(char *buffer, size_t maxlength, const char *fmt, ...); + size_t FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list ap); private: CStack<CDataPack *> m_freepacks; char m_SMBaseDir[PLATFORM_MAX_PATH]; diff --git a/public/ISourceMod.h b/public/ISourceMod.h index e9ec4ac9..4daf7745 100644 --- a/public/ISourceMod.h +++ b/public/ISourceMod.h @@ -43,7 +43,7 @@ #include <time.h> #define SMINTERFACE_SOURCEMOD_NAME "ISourceMod" -#define SMINTERFACE_SOURCEMOD_VERSION 7 +#define SMINTERFACE_SOURCEMOD_VERSION 8 /** * @brief Forward declaration of the KeyValues class. @@ -248,6 +248,28 @@ namespace SourceMod * @param hook Hook function. */ virtual void RemoveGameFrameHook(GAME_FRAME_HOOK hook) =0; + + /** + * @brief Platform-safe wrapper around snprintf(). + * + * @param buffer String buffer. + * @param maxlength Maximum length of buffer. + * @param fmt Format specifier string. + * @param ... Format arguments. + * @return Number of bytes (not including null terminator) written. + */ + virtual size_t Format(char *buffer, size_t maxlength, const char *fmt, ...) = 0; + + /** + * @brief Platform-safe wrapper around vsnprintf(). + * + * @param buffer String buffer. + * @param maxlength Maximum length of buffer. + * @param fmt Format specifier string. + * @param ap Format arguments. + * @return Number of bytes (not including null terminator) written. + */ + virtual size_t FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list ap) = 0; }; }