diff --git a/cathook/src/common.h b/cathook/src/common.h index c2f3a88e..dfc2d523 100644 --- a/cathook/src/common.h +++ b/cathook/src/common.h @@ -22,6 +22,7 @@ #include "trace.h" #include "cvwrapper.h" #include "netvars.h" +#include "sstring.h" #include "prediction.h" #include "sdk.h" diff --git a/cathook/src/helpers.cpp b/cathook/src/helpers.cpp index 6fed4500..dff9d8e5 100644 --- a/cathook/src/helpers.cpp +++ b/cathook/src/helpers.cpp @@ -16,7 +16,7 @@ FILE* hConVarsFile = 0; void BeginConVars() { passwd* pwd = getpwuid(getuid()); char* user = pwd->pw_name; - hConVarsFile = fopen(strfmt("/home/%s/.local/share/Steam/steamapps/common/Team Fortress 2/tf/cfg/cat_defaults.cfg", user), "w"); + hConVarsFile = fopen((const char*)strfmt("/home/%s/.local/share/Steam/steamapps/common/Team Fortress 2/tf/cfg/cat_defaults.cfg", user), "w"); SetCVarInterface(interfaces::cvar); } @@ -741,13 +741,13 @@ void EndPrediction() { interfaces::gvars->frametime = oldFrametime; }*/ -char* strfmt(const char* fmt, ...) { - char buf[1024]; +sstring strfmt(const char* fmt, ...) { + sstring result(1024); va_list list; va_start(list, fmt); - vsprintf(buf, fmt, list); + vsprintf(result, fmt, list); va_end(list); - return buf; + return result; } const char* powerups[] = { diff --git a/cathook/src/helpers.h b/cathook/src/helpers.h index 82f65e99..915e96f9 100644 --- a/cathook/src/helpers.h +++ b/cathook/src/helpers.h @@ -16,6 +16,7 @@ class CUserCmd; class CCommand; struct player_info_s; class Vector; +class sstring; #define PI 3.14159265358979323846f #define RADPI 57.295779513082f @@ -69,7 +70,7 @@ bool GetProjectileData(CachedEntity* weapon, float& speed, float& gravity); bool IsVectorVisible(Vector a, Vector b); relation GetRelation(CachedEntity* ent); // TODO new relations bool IsSentryBuster(CachedEntity* ent); -char* strfmt(const char* fmt, ...); +sstring strfmt(const char* fmt, ...); // TODO move that to weaponid.h bool IsAmbassador(CachedEntity* ent); diff --git a/cathook/src/logging.cpp b/cathook/src/logging.cpp index 2189db8c..f8f621ba 100644 --- a/cathook/src/logging.cpp +++ b/cathook/src/logging.cpp @@ -14,13 +14,14 @@ #include "interfaces.h" #include "sdk.h" +#include "sstring.h" FILE* logging::handle = 0; void logging::Initialize() { passwd* pwd = getpwuid(getuid()); char* user = pwd->pw_name; - logging::handle = fopen(strfmt("/tmp/cathook-%s.log", user), "w"); + logging::handle = fopen((const char*)strfmt("/tmp/cathook-%s.log", user), "w"); } void logging::Info(const char* fmt, ...) { diff --git a/cathook/src/sharedobj.cpp b/cathook/src/sharedobj.cpp index 513fbe2e..29fe07d1 100644 --- a/cathook/src/sharedobj.cpp +++ b/cathook/src/sharedobj.cpp @@ -8,13 +8,14 @@ #include "sharedobj.h" #include "logging.h" #include "helpers.h" +#include "sstring.h" #include #include #include const char* path_from_proc_maps(const char* name) { - FILE* proc_maps = fopen(strfmt("/proc/%i/maps", getpid()), "r"); + FILE* proc_maps = fopen((const char*)strfmt("/proc/%i/maps", getpid()), "r"); if (!proc_maps) return (const char*)0; char* buffer = new char[512]; while (fgets(buffer, 512, proc_maps)) { diff --git a/cathook/src/sstring.h b/cathook/src/sstring.h new file mode 100644 index 00000000..84b1031c --- /dev/null +++ b/cathook/src/sstring.h @@ -0,0 +1,22 @@ +/* + * sstring.h + * + * Created on: Dec 23, 2016 + * Author: nullifiedcat + */ + +#ifndef SSTRING_H_ +#define SSTRING_H_ + +class sstring { +public: + inline sstring() { length = 0; p_String = 0; }; + inline sstring(int length) { this->length = length; p_String = new char[length]; } + inline ~sstring() { delete [] p_String; } + inline operator const char*() const { return p_String; }; + inline operator char*() const { return (char*)p_String; } + const char* p_String; + int length; +}; + +#endif /* SSTRING_H_ */