Fix crash on Windows when dumping admin cache to file.
This commit is contained in:
parent
ac96bb177a
commit
512fae4c25
@ -1762,7 +1762,7 @@ void iterator_group_grp_override(FILE *fp, const char *key, OverrideRule rule)
|
|||||||
fprintf(fp, "\t\t\t\"@%s\"\t\t\"%s\"\n", key, str);
|
fprintf(fp, "\t\t\t\"@%s\"\t\t\"%s\"\n", key, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminCache::DumpCache(FILE *fp)
|
bool AdminCache::DumpCache(const char *filename)
|
||||||
{
|
{
|
||||||
int *itable;
|
int *itable;
|
||||||
AdminId aid;
|
AdminId aid;
|
||||||
@ -1771,6 +1771,12 @@ void AdminCache::DumpCache(FILE *fp)
|
|||||||
unsigned int num;
|
unsigned int num;
|
||||||
AdminUser *pAdmin;
|
AdminUser *pAdmin;
|
||||||
AdminGroup *pGroup;
|
AdminGroup *pGroup;
|
||||||
|
|
||||||
|
FILE *fp;
|
||||||
|
if ((fp = fopen(filename, "wt")) == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(fp, "\"Groups\"\n{\n");
|
fprintf(fp, "\"Groups\"\n{\n");
|
||||||
|
|
||||||
@ -1901,6 +1907,10 @@ void AdminCache::DumpCache(FILE *fp)
|
|||||||
for (FlagMap::iterator iter = m_CmdOverrides.iter(); !iter.empty(); iter.next())
|
for (FlagMap::iterator iter = m_CmdOverrides.iter(); !iter.empty(); iter.next())
|
||||||
iterator_glob_basic_override(fp, iter->key.chars(), iter->value);
|
iterator_glob_basic_override(fp, iter->key.chars(), iter->value);
|
||||||
fprintf(fp, "}\n");
|
fprintf(fp, "}\n");
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminGroup *AdminCache::GetGroup(GroupId gid)
|
AdminGroup *AdminCache::GetGroup(GroupId gid)
|
||||||
|
@ -183,7 +183,7 @@ public: //IAdminSystem
|
|||||||
bool IsValidAdmin(AdminId id);
|
bool IsValidAdmin(AdminId id);
|
||||||
bool CheckClientCommandAccess(int client, const char *cmd, FlagBits cmdflags);
|
bool CheckClientCommandAccess(int client, const char *cmd, FlagBits cmdflags);
|
||||||
public:
|
public:
|
||||||
void DumpCache(FILE *fp);
|
bool DumpCache(const char *filename);
|
||||||
AdminGroup *GetGroup(GroupId gid);
|
AdminGroup *GetGroup(GroupId gid);
|
||||||
AdminUser *GetUser(AdminId id);
|
AdminUser *GetUser(AdminId id);
|
||||||
const char *GetString(int idx);
|
const char *GetString(int idx);
|
||||||
|
@ -108,9 +108,9 @@ static void DumpHandles(void (*dumpfn)(const char *fmt, ...))
|
|||||||
g_HandleSys.Dump(dumpfn);
|
g_HandleSys.Dump(dumpfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DumpAdminCache(FILE *f)
|
static bool DumpAdminCache(const char *filename)
|
||||||
{
|
{
|
||||||
g_Admins.DumpCache(f);
|
return g_Admins.DumpCache(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RegisterProfiler(IProfilingTool *tool)
|
static void RegisterProfiler(IProfilingTool *tool)
|
||||||
|
@ -350,7 +350,7 @@ struct sm_logic_t
|
|||||||
void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
|
void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
|
||||||
void (*AddNatives)(sp_nativeinfo_t *natives);
|
void (*AddNatives)(sp_nativeinfo_t *natives);
|
||||||
void (*DumpHandles)(void (*dumpfn)(const char *fmt, ...));
|
void (*DumpHandles)(void (*dumpfn)(const char *fmt, ...));
|
||||||
void (*DumpAdminCache)(FILE *);
|
bool (*DumpAdminCache)(const char *filename);
|
||||||
void (*RegisterProfiler)(IProfilingTool *tool);
|
void (*RegisterProfiler)(IProfilingTool *tool);
|
||||||
IScriptManager *scripts;
|
IScriptManager *scripts;
|
||||||
IShareSys *sharesys;
|
IShareSys *sharesys;
|
||||||
|
@ -424,21 +424,15 @@ CON_COMMAND(sm_reload_translations, "Reparses all loaded translation files")
|
|||||||
|
|
||||||
CON_COMMAND(sm_dump_admcache, "Dumps the admin cache for debugging")
|
CON_COMMAND(sm_dump_admcache, "Dumps the admin cache for debugging")
|
||||||
{
|
{
|
||||||
FILE *fp;
|
|
||||||
char buffer[PLATFORM_MAX_PATH];
|
char buffer[PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
g_SourceMod.BuildPath(Path_SM, buffer, sizeof(buffer), "data/admin_cache_dump.txt");
|
g_SourceMod.BuildPath(Path_SM, buffer, sizeof(buffer), "data/admin_cache_dump.txt");
|
||||||
|
|
||||||
if ((fp = fopen(buffer, "wt")) == NULL)
|
if (!logicore.DumpAdminCache(buffer))
|
||||||
{
|
{
|
||||||
g_RootMenu.ConsolePrint("Could not open file for writing: %s", buffer);
|
g_RootMenu.ConsolePrint("Could not open file for writing: %s", buffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logicore.DumpAdminCache(fp);
|
|
||||||
|
|
||||||
g_RootMenu.ConsolePrint("Admin cache dumped to: %s", buffer);
|
g_RootMenu.ConsolePrint("Admin cache dumped to: %s", buffer);
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user