diff --git a/metamod/msvc/metamod.vcxproj b/metamod/msvc/metamod.vcxproj index c9e658a..7a2f129 100644 --- a/metamod/msvc/metamod.vcxproj +++ b/metamod/msvc/metamod.vcxproj @@ -18,11 +18,11 @@ DynamicLibrary - v120 + v120_xp DynamicLibrary - v120 + v120_xp @@ -45,7 +45,7 @@ - $(ProjectName)_mm + $(ProjectName) $(ProjectName) @@ -78,6 +78,7 @@ MachineX86 false psapi.lib;%(AdditionalDependencies) + Console _DEBUG;%(PreprocessorDefinitions) @@ -141,6 +142,7 @@ MachineX86 false psapi.lib;%(AdditionalDependencies) + Console NDEBUG;%(PreprocessorDefinitions) diff --git a/metamod/src/commands_meta.cpp b/metamod/src/commands_meta.cpp index c7a7b3e..04d562d 100644 --- a/metamod/src/commands_meta.cpp +++ b/metamod/src/commands_meta.cpp @@ -351,7 +351,7 @@ void cmd_doplug(PLUG_CMD pcmd) { if (findp && findp->status >= PL_RUNNING) { - META_DEBUG(3, ("Required plugin '%s' found loaded and running.", arg)); + META_DEBUG(3, "Required plugin '%s' found loaded and running.", arg); return; } // Output to both places, because we don't want the admin diff --git a/metamod/src/conf_meta.cpp b/metamod/src/conf_meta.cpp index 2b94ae1..2682d30 100644 --- a/metamod/src/conf_meta.cpp +++ b/metamod/src/conf_meta.cpp @@ -71,20 +71,20 @@ bool MConfig::set(option_t* setp, const char* setstr) setstr); return false; } - META_DEBUG(3, ("set config bool: %s = %s", setp->name, *optval ? "true" : "false")); + META_DEBUG(3, "set config bool: %s = %s", setp->name, *optval ? "true" : "false"); break; case CF_STR: if (*optstr) Q_free(*optstr); *optstr = Q_strdup(setstr); - META_DEBUG(3, ("set config string: %s = %s", setp->name, *optstr)); + META_DEBUG(3, "set config string: %s = %s", setp->name, *optstr); break; case CF_PATH: if (*optstr) Q_free(*optstr); full_gamedir_path(setstr, pathbuf); *optstr = Q_strdup(pathbuf); - META_DEBUG(3, ("set config path: %s = %s", setp->name, *optstr)); + META_DEBUG(3, "set config path: %s = %s", setp->name, *optstr); break; default: META_ERROR("unrecognized config type '%d'", setp->type); @@ -114,7 +114,7 @@ bool MConfig::load(const char* fn) return false; } - META_DEBUG(2, ("Loading from config file: %s", loadfile)); + META_DEBUG(2, "Loading from config file: %s", loadfile); for (ln = 1; !feof(fp) && fgets(line, sizeof(line), fp); ln++) { if (line[0] == '#' || line[0] == ';' || !Q_strncmp(line, "//", 2)) diff --git a/metamod/src/game_support.cpp b/metamod/src/game_support.cpp index 80fed2b..550f773 100644 --- a/metamod/src/game_support.cpp +++ b/metamod/src/game_support.cpp @@ -50,7 +50,7 @@ bool install_gamedll(char *from, const char *to) int fd = open(to, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if (fd < 0) { - META_DEBUG(3, ("Installing gamedll from cache: Failed to create file %s: %s", to, strerror(errno)) ); + META_DEBUG(3, "Installing gamedll from cache: Failed to create file %s: %s", to, strerror(errno)); FREE_FILE(cachefile); return false; } @@ -62,7 +62,7 @@ bool install_gamedll(char *from, const char *to) // Writing the file was not successfull if (length_out != length_in) { - META_DEBUG(3, ("Installing gamedll from chache: Failed to write all %d bytes to file, only %d written: %s", length_in, length_out, strerror(errno))); + META_DEBUG(3, "Installing gamedll from chache: Failed to write all %d bytes to file, only %d written: %s", length_in, length_out, strerror(errno)); // Let's not leave a mess but clean up nicely. if (length_out >= 0) @@ -75,7 +75,7 @@ bool install_gamedll(char *from, const char *to) } else { - META_DEBUG(3, ("Failed to install gamedll from cache: file %s not found in cache.", from)); + META_DEBUG(3, "Failed to install gamedll from cache: file %s not found in cache.", from); return false; } @@ -108,7 +108,7 @@ bool setup_gamedll(gamedll_t *gamedll) knownfn = known->linux_so; #endif - META_DEBUG(4, ("Checking for old version game DLL name '%s'.\n", knownfn)); + META_DEBUG(4, "Checking for old version game DLL name '%s'.\n", knownfn); Q_snprintf(gamedll->pathname, sizeof(gamedll->pathname), "dlls/%s", knownfn); // Check if the gamedll file exists. If not, try to install it from the cache. diff --git a/metamod/src/linkent.cpp b/metamod/src/linkent.cpp index e46eb37..60cc1e0 100644 --- a/metamod/src/linkent.cpp +++ b/metamod/src/linkent.cpp @@ -7,13 +7,13 @@ void do_link_ent(ENTITY_FN *pfnEntity, int *missing, const char *entStr, entvars { if (*missing) { - META_DEBUG(9, ("Skipping entity '%s'; was previously found missing", entStr)); + META_DEBUG(9, "Skipping entity '%s'; was previously found missing", entStr); return; } if (!*pfnEntity) { - META_DEBUG(9, ("Looking up game entity '%s'", entStr)); + META_DEBUG(9, "Looking up game entity '%s'", entStr); *pfnEntity = (ENTITY_FN)GameDLL.sys_module.getsym(entStr); } @@ -24,6 +24,6 @@ void do_link_ent(ENTITY_FN *pfnEntity, int *missing, const char *entStr, entvars return; } - META_DEBUG(8, ("Linking game entity '%s'", entStr)); + META_DEBUG(8, "Linking game entity '%s'", entStr); (*pfnEntity)(pev); } diff --git a/metamod/src/log_meta.cpp b/metamod/src/log_meta.cpp index a321f87..60f1f73 100644 --- a/metamod/src/log_meta.cpp +++ b/metamod/src/log_meta.cpp @@ -71,6 +71,18 @@ void META_LOG(const char *fmt, ...) va_end(ap); } +void NOINLINE META_DEBUG_(int level, const char* fmt, ...) +{ + char buf[MAX_LOGMSG_LEN]; + + va_list ap; + va_start(ap, fmt); + Q_vsnprintf(buf, sizeof buf, fmt, ap); + va_end(ap); + + ALERT(at_logged, "[META] (debug:%i) %s\n", level, buf); +} + // Print to client. void META_CLIENT(edict_t *pEntity, const char *fmt, ...) { diff --git a/metamod/src/log_meta.h b/metamod/src/log_meta.h index 207303d..2c657e3 100644 --- a/metamod/src/log_meta.h +++ b/metamod/src/log_meta.h @@ -13,9 +13,8 @@ extern cvar_t meta_debug; template void META_DEBUG(int level, const char* fmt, t_args... args) { - if (meta_debug.value < level) - return; - ALERT(at_logged, "[META] (debug:%i) %s\n", level, args...); // TODO + if (unlikely(meta_debug.value >= level)) + META_DEBUG_(level, fmt, args...); } void META_CONS(const char *fmt, ...); @@ -24,6 +23,7 @@ void META_INFO(const char *fmt, ...); void META_WARNING(const char *fmt, ...); void META_ERROR(const char *fmt, ...); void META_LOG(const char *fmt, ...); +void META_DEBUG_(int level, const char* fmt, ...); void META_CLIENT(edict_t *pEntity, const char *fmt, ...); void flush_ALERT_buffer(void); diff --git a/metamod/src/metamod.cpp b/metamod/src/metamod.cpp index 961df08..4b0e24a 100644 --- a/metamod/src/metamod.cpp +++ b/metamod/src/metamod.cpp @@ -70,6 +70,7 @@ void metamod_startup() // Init default values g_config->init(global_options); + // Find config file cfile = CONFIG_INI; if ((cp = LOCALINFO("mm_configfile")) && *cp != '\0') @@ -84,7 +85,7 @@ void metamod_startup() if (valid_gamedir_file(cfile)) g_config->load(cfile); else - META_DEBUG(2, ("No config.ini file found: %s", CONFIG_INI)); + META_DEBUG(2, "No config.ini file found: %s", CONFIG_INI); // Now, override config options with localinfo commandline options. if ((cp = LOCALINFO("mm_debug")) && *cp != '\0') @@ -180,10 +181,7 @@ void metamod_startup() // Exit on failure here? Dunno... } -#ifdef UNFINISHED - // Start up the log parsing thread. - startup_logparse_thread(); -#endif + meta_init_rehlds_api(); // Allow for commands to metamod plugins at startup. Autoexec.cfg is // read too early, and server.cfg is read too late. @@ -207,7 +205,7 @@ void metamod_startup() { char cmd[NAME_MAX]; META_LOG("Exec'ing metamod exec.cfg: %s...", mmfile); - Q_snprintf(cmd, sizeof(cmd), "exec %s\n", mmfile); + Q_snprintf(cmd, sizeof cmd, "exec %s\n", mmfile); SERVER_COMMAND(cmd); } } @@ -241,13 +239,13 @@ bool meta_init_gamedll(void) // Old style; GET_GAME_DIR returned full pathname. Copy this into // our gamedir, and truncate to get the game name. // (note check for both linux and win32 full pathname.) - Q_strncpy(GameDLL.gamedir, gamedir, sizeof(GameDLL.gamedir) - 1); - GameDLL.gamedir[sizeof(GameDLL.gamedir) - 1] = '\0'; + Q_strncpy(GameDLL.gamedir, gamedir, sizeof GameDLL.gamedir - 1); + GameDLL.gamedir[sizeof GameDLL.gamedir - 1] = '\0'; cp = Q_strrchr(gamedir, '/') + 1; - Q_strncpy(GameDLL.name, cp, sizeof(GameDLL.name) - 1); - GameDLL.name[sizeof(GameDLL.name) - 1] = '\0'; + Q_strncpy(GameDLL.name, cp, sizeof GameDLL.name - 1); + GameDLL.name[sizeof GameDLL.name - 1] = '\0'; } else { @@ -265,10 +263,52 @@ bool meta_init_gamedll(void) GameDLL.name[sizeof(GameDLL.name) - 1] = '\0'; } - META_DEBUG(3, ("Game: %s", GameDLL.name)); + META_DEBUG(3, "Game: %s", GameDLL.name); return true; } +template +bool get_function_table(const char* ifname, int ifvers_mm, table_t*& table, size_t table_size = sizeof(table_t)) +{ + typedef int (*getfunc_t)(table_t *pFunctionTable, ifvers_t interfaceVersion); + + auto pfnGetFuncs = (getfunc_t)GameDLL.sys_module.getsym(ifname); + + if (pfnGetFuncs) { + table = (table_t *)Q_calloc(1, table_size); + + int ifvers_gamedll = ifvers_mm; + + if (pfnGetFuncs(table, ifvers_gamedll)) { + META_DEBUG(3, "dll: Game '%s': Found %s", GameDLL.name, ifname); + return true; + } + + META_ERROR("dll: Failure calling %s in game '%s'", ifname, GameDLL.name); + Q_free(table); + table = nullptr; + + if (ifvers_gamedll != ifvers_mm) { + META_ERROR("dll: Interface version didn't match; we wanted %d, they had %d", ifvers_mm, ifvers_gamedll); + META_CONS("=================="); + META_CONS("Game DLL version mismatch"); + META_CONS("DLL version is %d, engine version is %d", ifvers_gamedll, ifvers_mm); + if (ifvers_gamedll > ifvers_mm) + META_CONS("g_engine appears to be outdated, check for updates"); + else + META_CONS("The game DLL for %s appears to be outdated, check for updates", GameDLL.name); + META_CONS("=================="); + ALERT(at_error, "Exiting...\n"); + } + } + else { + META_DEBUG(5, "dll: Game '%s': No %s", GameDLL.name, ifname); + table = nullptr; + } + + return false; +} + // Load game DLL. // meta_errno values: // - ME_DLOPEN couldn't dlopen game dll file @@ -276,14 +316,6 @@ bool meta_init_gamedll(void) // (GiveFnptrsToDll, GetEntityAPI, GetEntityAPI2) bool meta_load_gamedll(void) { - int iface_vers; - int found = 0; - - GIVE_ENGINE_FUNCTIONS_FN pfn_give_engfuncs; - GETNEWDLLFUNCTIONS_FN pfn_getapinew; - GETENTITYAPI2_FN pfn_getapi2; - GETENTITYAPI_FN pfn_getapi; - if (!setup_gamedll(&GameDLL)) { META_ERROR("dll: Unrecognized game: %s", GameDLL.name); @@ -305,10 +337,12 @@ bool meta_load_gamedll(void) // wanted to catch one of the functions, but now that plugins are // dynamically loadable at any time, we have to always pass our table, // so that any plugin loaded later can catch what they need to. - if ((pfn_give_engfuncs = (GIVE_ENGINE_FUNCTIONS_FN)GameDLL.sys_module.getsym("GiveFnptrsToDll"))) + auto pfn_give_engfuncs = (GIVE_ENGINE_FUNCTIONS_FN)GameDLL.sys_module.getsym("GiveFnptrsToDll"); + + if (pfn_give_engfuncs) { pfn_give_engfuncs(&meta_engfuncs, gpGlobals); - META_DEBUG(3, ("dll: Game '%s': Called GiveFnptrsToDll", GameDLL.name)); + META_DEBUG(3, "dll: Game '%s': Called GiveFnptrsToDll", GameDLL.name); } else { @@ -316,62 +350,20 @@ bool meta_load_gamedll(void) return false; } - // TODO - // Yes...another macro. -#define GET_FUNC_TABLE_FROM_GAME(gamedll, pfnGetFuncs, STR_GetFuncs, struct_field, API_TYPE, TABLE_TYPE, vers_pass, vers_int, vers_want, gotit) \ - if ((pfnGetFuncs = (API_TYPE)gamedll.sys_module.getsym(STR_GetFuncs))) { \ - gamedll.funcs.struct_field = (TABLE_TYPE *)Q_calloc(1, sizeof(TABLE_TYPE)); \ - if (!gamedll.funcs.struct_field) {\ - META_ERROR("malloc failed for gamedll struct_field: %s", STR_GetFuncs); \ - } \ - else if (pfnGetFuncs(gamedll.funcs.struct_field, vers_pass)) { \ - META_DEBUG(3, ("dll: Game '%s': Found %s", gamedll.name, STR_GetFuncs)); \ - gotit = 1; \ - } \ - else { \ - META_ERROR("dll: Failure calling %s in game '%s'", STR_GetFuncs, gamedll.name); \ - Q_free(gamedll.funcs.struct_field); \ - gamedll.funcs.struct_field = NULL; \ - if (vers_int != vers_want) { \ - META_ERROR("dll: Interface version didn't match; we wanted %d, they had %d", vers_want, vers_int); \ - /* reproduce error from engine */ \ - META_CONS("=================="); \ - META_CONS("Game DLL version mismatch"); \ - META_CONS("DLL version is %d, engine version is %d", vers_int, vers_want); \ - if (vers_int > vers_want) \ - META_CONS("g_engine appears to be outdated, check for updates"); \ - else \ - META_CONS("The game DLL for %s appears to be outdated, check for updates", GameDLL.name); \ - META_CONS("=================="); \ - ALERT(at_error, "Exiting...\n"); \ - } \ - } \ - } \ - else { \ - META_DEBUG(5, ("dll: Game '%s': No %s", gamedll.name, STR_GetFuncs)); \ - gamedll.funcs.struct_field = NULL; \ - } - // Look for API-NEW interface in Game dll. We do this before API2/API, because // that's what the engine appears to do.. - iface_vers = NEW_DLL_FUNCTIONS_VERSION; - GET_FUNC_TABLE_FROM_GAME(GameDLL, pfn_getapinew, "GetNewDLLFunctions", newapi_table, GETNEWDLLFUNCTIONS_FN, meta_new_dll_functions_t, &iface_vers, iface_vers, NEW_DLL_FUNCTIONS_VERSION, found); + get_function_table("GetNewDLLFunctions", NEW_DLL_FUNCTIONS_VERSION, GameDLL.funcs.newapi_table); // Look for API2 interface in plugin; preferred over API-1. - found = 0; - iface_vers = INTERFACE_VERSION; - GET_FUNC_TABLE_FROM_GAME(GameDLL, pfn_getapi2, "GetEntityAPI2", dllapi_table, GETENTITYAPI2_FN, DLL_FUNCTIONS, &iface_vers, iface_vers, INTERFACE_VERSION, found); + bool found = get_function_table("GetEntityAPI2", INTERFACE_VERSION, GameDLL.funcs.dllapi_table); // Look for API-1 in plugin, if API2 interface wasn't found. - if (!found) - { - found = 0; - GET_FUNC_TABLE_FROM_GAME(GameDLL, pfn_getapi, "GetEntityAPI", dllapi_table, GETENTITYAPI_FN, DLL_FUNCTIONS, INTERFACE_VERSION, INTERFACE_VERSION, INTERFACE_VERSION, found); + if (!found) { + found = get_function_table("GetEntityAPI", INTERFACE_VERSION, GameDLL.funcs.dllapi_table); } // If didn't find either, return failure. - if (!found) - { + if (!found) { META_ERROR("dll: Couldn't find either GetEntityAPI nor GetEntityAPI2 in game DLL '%s'", GameDLL.name); return false; } diff --git a/metamod/src/mlist.cpp b/metamod/src/mlist.cpp index a17ea0e..dffaa4d 100644 --- a/metamod/src/mlist.cpp +++ b/metamod/src/mlist.cpp @@ -83,23 +83,23 @@ MPlugin *MPluginList::find(const char* findpath) if (!findpath) return NULL; - META_DEBUG(8, ("Looking for loaded plugin with dlfnamepath: %s", findpath)); + META_DEBUG(8, "Looking for loaded plugin with dlfnamepath: %s", findpath); for (int i = 0; i < max_loaded_count; i++) { - META_DEBUG(9, ("Looking at: plugin %s loadedpath: %s", plist[i].file, plist[i].pathname)); + META_DEBUG(9, "Looking at: plugin %s loadedpath: %s", plist[i].file, plist[i].pathname); if (plist[i].status < PL_VALID) continue; if (!Q_strcmp(plist[i].pathname, findpath)) { - META_DEBUG(8, ("Found loaded plugin %s", plist[i].file)); + META_DEBUG(8, "Found loaded plugin %s", plist[i].file); return &plist[i]; } } - META_DEBUG(8, ("No loaded plugin found with path: %s", findpath)); + META_DEBUG(8, "No loaded plugin found with path: %s", findpath); return NULL; } @@ -228,7 +228,7 @@ MPlugin* MPluginList::plugin_addload(plid_t plid, const char* fname, PLUG_LOADTI if (!(pl_loader = find(plid))) { - META_DEBUG(1, ("Couldn't find plugin that gave this loading request!")); + META_DEBUG(1, "Couldn't find plugin that gave this loading request!"); return NULL; } @@ -241,20 +241,19 @@ MPlugin* MPluginList::plugin_addload(plid_t plid, const char* fname, PLUG_LOADTI if (pl_temp.resolve() != true) { - META_DEBUG(1, ("Couldn't resolve given path into a file: %s", pl_temp.file)); + META_DEBUG(1, "Couldn't resolve given path into a file: %s", pl_temp.file); return NULL; } if ((pl_found = find(pl_temp.pathname))) { - META_DEBUG(1, ("Plugin '%s' already in current list; file=%s desc='%s'", - pl_temp.file, pl_found->file, pl_found->desc)); + META_DEBUG(1, "Plugin '%s' already in current list; file=%s desc='%s'", pl_temp.file, pl_found->file, pl_found->desc); return NULL; } if (!(pl_added = add(&pl_temp))) { - META_DEBUG(1, ("Couldn't add plugin '%s' to list; see log", pl_temp.desc)); + META_DEBUG(1, "Couldn't add plugin '%s' to list; see log", pl_temp.desc); return NULL; } @@ -263,21 +262,21 @@ MPlugin* MPluginList::plugin_addload(plid_t plid, const char* fname, PLUG_LOADTI { if (1/*meta_errno == ME_NOTALLOWED || meta_errno == ME_DELAYED*/) { - META_DEBUG(1, ("Plugin '%s' couldn't attach; only allowed %s", pl_added->desc, pl_added->str_loadable(SL_ALLOWED))); + META_DEBUG(1, "Plugin '%s' couldn't attach; only allowed %s", pl_added->desc, pl_added->str_loadable(SL_ALLOWED)); pl_added->clear(); } else if (pl_added->status == PL_OPENED) { - META_DEBUG(1, ("Opened plugin '%s', but failed to attach; see log", pl_added->desc)); + META_DEBUG(1, "Opened plugin '%s', but failed to attach; see log", pl_added->desc); } else { - META_DEBUG(1, ("Couldn't load plugin '%s'; see log", pl_added->desc)); + META_DEBUG(1, "Couldn't load plugin '%s'; see log", pl_added->desc); } return NULL; } - META_DEBUG(1, ("Loaded plugin '%s' successfully", pl_added->desc)); + META_DEBUG(1, "Loaded plugin '%s' successfully", pl_added->desc); return pl_added; } @@ -518,7 +517,7 @@ bool MPluginList::ini_refresh() // Newer file on disk. else if (pl_found->status >= PL_OPENED) { - META_DEBUG(2, ("ini: Plugin '%s' has newer file on disk", pl_found->desc)); + META_DEBUG(2, "ini: Plugin '%s' has newer file on disk", pl_found->desc); pl_found->action = PA_RELOAD; } else @@ -679,19 +678,19 @@ bool MPluginList::refresh(PLUG_LOADTIME now) switch (iplug->action) { case PA_KEEP: - META_DEBUG(1, ("Keeping plugin '%s'", iplug->desc)); + META_DEBUG(1, "Keeping plugin '%s'", iplug->desc); iplug->action = PA_NONE; nkept++; break; case PA_LOAD: - META_DEBUG(1, ("Loading plugin '%s'", iplug->desc)); + META_DEBUG(1, "Loading plugin '%s'", iplug->desc); if (iplug->load(now)) nloaded++; else if (1/*meta_errno == ME_DELAYED*/) ndelayed++; break; case PA_RELOAD: - META_DEBUG(1, ("Reloading plugin '%s'", iplug->desc)); + META_DEBUG(1, "Reloading plugin '%s'", iplug->desc); if (iplug->reload(now, PNL_FILE_NEWER)) nreloaded++; else if (1/*meta_errno == ME_DELAYED*/) @@ -701,7 +700,7 @@ bool MPluginList::refresh(PLUG_LOADTIME now) // If previously loaded from ini, but apparently removed from new ini. if (iplug->source == PS_INI && iplug->status >= PL_RUNNING) { - META_DEBUG(1, ("Unloading plugin '%s'", iplug->desc)); + META_DEBUG(1, "Unloading plugin '%s'", iplug->desc); iplug->action = PA_UNLOAD; if (iplug->unload(now, PNL_INI_DELETED, PNL_INI_DELETED)) nunloaded++; @@ -711,7 +710,7 @@ bool MPluginList::refresh(PLUG_LOADTIME now) break; case PA_ATTACH: // Previously requested attach, but was delayed? - META_DEBUG(1, ("Retrying attach plugin '%s'", iplug->desc)); + META_DEBUG(1, "Retrying attach plugin '%s'", iplug->desc); if (iplug->retry(now, PNL_DELAYED)) nloaded++; else if (1/*meta_errno == ME_DELAYED*/) @@ -719,7 +718,7 @@ bool MPluginList::refresh(PLUG_LOADTIME now) break; case PA_UNLOAD: // Previously requested unload, but was delayed? - META_DEBUG(1, ("Retrying unload plugin '%s'", iplug->desc)); + META_DEBUG(1, "Retrying unload plugin '%s'", iplug->desc); if (iplug->retry(now, PNL_DELAYED)) nunloaded++; else if (1/*meta_errno == ME_DELAYED*/) diff --git a/metamod/src/mplugin.cpp b/metamod/src/mplugin.cpp index 3a6cb61..e437333 100644 --- a/metamod/src/mplugin.cpp +++ b/metamod/src/mplugin.cpp @@ -21,13 +21,13 @@ bool MPlugin::ini_parseline(char *line) // skip empty lines if (line[0] == '\0') { - META_DEBUG(7, ("ini: Ignoring empty line: %s", line)); + META_DEBUG(7, "ini: Ignoring empty line: %s", line); return false; } if (line[0] == '#' || line[0] == ';' || Q_strstr(line, "//") == line) { - META_DEBUG(7, ("ini: Ignoring commented line: %s", line)); + META_DEBUG(7, "ini: Ignoring commented line: %s", line); return false; } @@ -46,7 +46,7 @@ bool MPlugin::ini_parseline(char *line) else { // plugin is not for this OS - META_DEBUG(7, ("ini: Ignoring entry for %s", token)); + META_DEBUG(7, "ini: Ignoring entry for %s", token); return false; } @@ -140,7 +140,7 @@ bool MPlugin::plugin_unload(plid_t plid, PLUG_LOADTIME now, PL_UNLOAD_REASON rea if (0/*meta_errno == ME_DELAYED*/) { action = old_action; - META_DEBUG(2, ("dll: Failed unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(PT_ANYTIME, SL_SIMPLE))); + META_DEBUG(2, "dll: Failed unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(PT_ANYTIME, SL_SIMPLE)); } return false; @@ -306,11 +306,11 @@ bool MPlugin::resolve(void) if (!found) { - META_DEBUG(2, ("Couldn't resolve '%s' to file", filename)); + META_DEBUG(2, "Couldn't resolve '%s' to file", filename); return false; } - META_DEBUG(2, ("Resolved '%s' to file '%s'", filename, found)); + META_DEBUG(2, "Resolved '%s' to file '%s'", filename, found); // store pathname: the resolved path (should be absolute) Q_strncpy(pathname, found, sizeof pathname - 1); @@ -610,12 +610,12 @@ bool MPlugin::load(PLUG_LOADTIME now) if (info->loadable > PT_STARTUP) { // will try to attach again at next opportunity - META_DEBUG(2, ("dll: Delaying load plugin '%s'; can't attach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Delaying load plugin '%s'; can't attach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE)); return false; } else { - META_DEBUG(2, ("dll: Failed load plugin '%s'; can't attach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Failed load plugin '%s'; can't attach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE)); // don't try to attach again later action = PA_NONE; return false; @@ -718,11 +718,11 @@ bool MPlugin::query(void) if (pfn_init) { pfn_init(); - META_DEBUG(6, ("dll: Plugin '%s': Called Meta_Init()", desc)); + META_DEBUG(6, "dll: Plugin '%s': Called Meta_Init()", desc); } else { - META_DEBUG(5, ("dll: no Meta_Init present in plugin '%s'", desc)); + META_DEBUG(5, "dll: no Meta_Init present in plugin '%s'", desc); // don't return; not an error } @@ -735,7 +735,7 @@ bool MPlugin::query(void) return false; } pfn_give_engfuncs(g_engine.pl_funcs, g_engine.globals); - META_DEBUG(6, ("dll: Plugin '%s': Called GiveFnptrsToDll()", desc)); + META_DEBUG(6, "dll: Plugin '%s': Called GiveFnptrsToDll()", desc); // Call plugin's Meta_Query(), to pass our meta interface version, and get // plugin's info structure. @@ -752,8 +752,7 @@ bool MPlugin::query(void) } else { - META_DEBUG(6, ("dll: Plugin '%s': Called Meta_Query() successfully", - desc)); + META_DEBUG(6, "dll: Plugin '%s': Called Meta_Query() successfully", desc); } // Check for interface differences... Generally, a difference in major @@ -768,7 +767,7 @@ bool MPlugin::query(void) if (info && !FStrEq(info->ifvers, META_INTERFACE_VERSION)) { int mmajor = 0, mminor = 0, pmajor = 0, pminor = 0; - META_DEBUG(3, ("dll: Note: Plugin '%s' interface version didn't match; expected %s, found %s", desc, META_INTERFACE_VERSION, info->ifvers)); + META_DEBUG(3, "dll: Note: Plugin '%s' interface version didn't match; expected %s, found %s", desc, META_INTERFACE_VERSION, info->ifvers); sscanf(META_INTERFACE_VERSION, "%d:%d", &mmajor, &mminor); sscanf(info->ifvers, "%d:%d", &pmajor, &pminor); // If plugin has later interface version, it's incompatible @@ -816,7 +815,7 @@ bool MPlugin::query(void) desc[sizeof desc - 1] = '\0'; } - META_DEBUG(6, ("dll: Plugin '%s': Query successful", desc)); + META_DEBUG(6, "dll: Plugin '%s': Query successful", desc); return true; } @@ -887,7 +886,7 @@ bool MPlugin::attach(PLUG_LOADTIME now) return false; } - META_DEBUG(6, ("dll: Plugin '%s': Called Meta_Attach() successfully", desc)); + META_DEBUG(6, "dll: Plugin '%s': Called Meta_Attach() successfully", desc); // Rather than duplicate code, we use another ugly macro. Again, // a function isn't an option since we have varying types. @@ -896,7 +895,7 @@ bool MPlugin::attach(PLUG_LOADTIME now) if (!struct_field) \ struct_field = (TABLE_TYPE *)Q_calloc(1, sizeof(TABLE_TYPE)); \ if (meta_table.pfnGetFuncs(struct_field, vers_pass)) { \ - META_DEBUG(3, ("dll: Plugin '%s': Found %s", desc, STR_GetFuncs)); \ + META_DEBUG(3, "dll: Plugin '%s': Found %s", desc, STR_GetFuncs); \ } \ else { \ META_ERROR("dll: Failure calling %s in plugin '%s'", STR_GetFuncs, desc); \ @@ -905,7 +904,7 @@ bool MPlugin::attach(PLUG_LOADTIME now) } \ } \ else { \ - META_DEBUG(5, ("dll: Plugin '%s': No %s", desc, STR_GetFuncs)); \ + META_DEBUG(5, "dll: Plugin '%s': No %s", desc, STR_GetFuncs); \ if (struct_field) \ Q_free(struct_field); \ struct_field = NULL; \ @@ -1011,20 +1010,20 @@ bool MPlugin::unload(PLUG_LOADTIME now, PL_UNLOAD_REASON reason, PL_UNLOAD_REASO { if (reason == PNL_CMD_FORCED) { - META_DEBUG(2, ("dll: Forced unload plugin '%s' overriding allowed times: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Forced unload plugin '%s' overriding allowed times: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE)); } else { if (info->unloadable > PT_STARTUP) { - META_DEBUG(2, ("dll: Delaying unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Delaying unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE)); // caller should give message to user // try to unload again at next opportunity return false; } else { - META_DEBUG(2, ("dll: Failed unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Failed unload plugin '%s'; can't detach now: allowed=%s; now=%s", desc, str_unloadable(), str_loadtime(now, SL_SIMPLE)); // don't try to unload again later action = PA_NONE; return false; @@ -1042,11 +1041,11 @@ bool MPlugin::unload(PLUG_LOADTIME now, PL_UNLOAD_REASON reason, PL_UNLOAD_REASO { if (reason == PNL_RELOAD) { - META_DEBUG(2, ("dll: Reload plugin '%s' overriding failed detach", desc)); + META_DEBUG(2, "dll: Reload plugin '%s' overriding failed detach", desc); } else if (reason == PNL_CMD_FORCED) { - META_DEBUG(2, ("dll: Forced unload plugin '%s' overriding failed detach")); + META_DEBUG(2, "dll: Forced unload plugin '%s' overriding failed detach"); } else { @@ -1124,7 +1123,7 @@ bool MPlugin::detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) return false; } - META_DEBUG(6, ("dll: Plugin '%s': Called Meta_Detach() successfully", desc)); + META_DEBUG(6, "dll: Plugin '%s': Called Meta_Detach() successfully", desc); return true; } @@ -1147,14 +1146,14 @@ bool MPlugin::reload(PLUG_LOADTIME now, PL_UNLOAD_REASON reason) { if (info->loadable > PT_STARTUP) { - META_DEBUG(2, ("dll: Delaying reload plugin '%s'; would not be able to reattach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Delaying reload plugin '%s'; would not be able to reattach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE)); // caller should give message to user // try to reload again at next opportunity return false; } else { - META_DEBUG(2, ("dll: Failed reload plugin '%s'; would not be able to reattach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE))); + META_DEBUG(2, "dll: Failed reload plugin '%s'; would not be able to reattach now: allowed=%s; now=%s", desc, str_loadable(), str_loadtime(now, SL_SIMPLE)); // don't try to reload again later action = PA_NONE; return false; diff --git a/metamod/src/mreg.cpp b/metamod/src/mreg.cpp index 54ff5f8..6e43d14 100644 --- a/metamod/src/mreg.cpp +++ b/metamod/src/mreg.cpp @@ -1,8 +1,8 @@ #include "precompiled.h" -MRegCmd::MRegCmd(char* cmd_name, REG_CMD_FN cmd_handler, MPlugin* cmd_plugin) : m_pfunction(cmd_handler), m_status(RG_VALID), m_plugid(cmd_plugin->index) +MRegCmd::MRegCmd(char* cmd_name, REG_CMD_FN cmd_handler, MPlugin* cmd_plugin) : m_pfunction(cmd_handler), m_plugid(cmd_plugin->index), m_status(RG_VALID) { - m_name = _strdup(m_name); + m_name = _strdup(cmd_name); } bool MRegCmd::call() const diff --git a/metamod/src/mutil.cpp b/metamod/src/mutil.cpp index 140c298..3fe39a8 100644 --- a/metamod/src/mutil.cpp +++ b/metamod/src/mutil.cpp @@ -174,7 +174,7 @@ void EXT_FUNC mutil_CenterSayVarargs(plid_t plid, hudtextparms_t tparms, const c // Jussi Kivilinna. qboolean EXT_FUNC mutil_CallGameEntity(plid_t plid, const char *entStr, entvars_t *pev) { - META_DEBUG(8, ("Looking up game entity '%s' for plugin '%s'", entStr, plid->name)); + META_DEBUG(8, "Looking up game entity '%s' for plugin '%s'", entStr, plid->name); ENTITY_FN pfnEntity = (ENTITY_FN)GameDLL.sys_module.getsym(entStr); if (!pfnEntity) @@ -183,7 +183,7 @@ qboolean EXT_FUNC mutil_CallGameEntity(plid_t plid, const char *entStr, entvars_ return false; } - META_DEBUG(7, ("Calling game entity '%s' for plugin '%s'", entStr, plid->name)); + META_DEBUG(7, "Calling game entity '%s' for plugin '%s'", entStr, plid->name); (*pfnEntity)(pev); return true; } diff --git a/metamod/src/osdep.h b/metamod/src/osdep.h index 219c382..4579c8e 100644 --- a/metamod/src/osdep.h +++ b/metamod/src/osdep.h @@ -7,12 +7,18 @@ #define PLATFORM "mswin" #define PLATFORM_SPC "win32" #define PLATFORM_DLEXT ".dll" + + #define likely(x) (x) + #define unlikely(x) (x) #else #define UNUSED __attribute__((unused)) #define PLATFORM "linux" #define PLATFORM_SPC "lin32" #define PLATFORM_DLEXT ".so" + + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) #endif #include "mreg.h" diff --git a/metamod/src/reg_support.cpp b/metamod/src/reg_support.cpp index ced3aec..9d6b415 100644 --- a/metamod/src/reg_support.cpp +++ b/metamod/src/reg_support.cpp @@ -30,7 +30,7 @@ void EXT_FUNC meta_AddServerCommand(char *cmd_name, void (*function)()) { MPlugin *plug = g_plugins->find_memloc(function); - META_DEBUG(4, ("called: meta_AddServerCommand; cmd_name=%s, function=%d, plugin=%s", cmd_name, function, plug ? plug->file : "unknown")); + META_DEBUG(4, "called: meta_AddServerCommand; cmd_name=%s, function=%d, plugin=%s", cmd_name, function, plug ? plug->file : "unknown"); if (!plug) { META_ERROR("Failed to find memloc for regcmd '%s'", cmd_name); diff --git a/metamod/src/support_meta.cpp b/metamod/src/support_meta.cpp index 96ebb79..1f09437 100644 --- a/metamod/src/support_meta.cpp +++ b/metamod/src/support_meta.cpp @@ -16,10 +16,9 @@ void __declspec(noreturn) do_exit(int exitval) // Special-case-recognize "/dev/null" as a valid file. int valid_gamedir_file(const char* path) { - char buf[PATH_MAX ]; struct stat st; - int ret, reg, size; - + char buf[PATH_MAX]; + if (!path) return FALSE; @@ -32,26 +31,26 @@ int valid_gamedir_file(const char* path) buf[sizeof buf - 1] = '\0'; } else - snprintf(buf, sizeof(buf), "%s/%s", GameDLL.gamedir, path); + snprintf(buf, sizeof buf, "%s/%s", GameDLL.gamedir, path); - ret = stat(buf, &st); + int ret = stat(buf, &st); if (ret != 0) { - META_DEBUG(5, ("Unable to stat '%s': %s", buf, strerror(errno))); + META_DEBUG(5, "Unable to stat '%s': %s", buf, strerror(errno)); return FALSE; } - reg = S_ISREG(st.st_mode); + int reg = S_ISREG(st.st_mode); if (!reg) { - META_DEBUG(5, ("Not a regular file: %s", buf)); + META_DEBUG(5, "Not a regular file: %s", buf); return FALSE; } - size = st.st_size; + int size = st.st_size; if (!size) { - META_DEBUG(5, ("Empty file: %s", buf)); + META_DEBUG(5, "Empty file: %s", buf); return FALSE; } @@ -83,7 +82,7 @@ char* full_gamedir_path(const char* path, char* fullpath) // Remove relative path components, if possible. if (!realpath(buf, fullpath)) { - META_DEBUG(4, ("Unable to get realpath for '%s': %s", buf, str_os_error())); + META_DEBUG(4, "Unable to get realpath for '%s': %s", buf, str_os_error()); Q_strncpy(fullpath, path, sizeof(fullpath) - 1); fullpath[sizeof(fullpath) - 1] = '\0'; } diff --git a/metamod/src/utils.cpp b/metamod/src/utils.cpp index 58b2dbe..7737a9a 100644 --- a/metamod/src/utils.cpp +++ b/metamod/src/utils.cpp @@ -106,13 +106,10 @@ void normalize_pathname(char *path) #ifdef _WIN32 char *cp; - META_DEBUG(8, ("normalize: %s", path)); for (cp = path; *cp; cp++) { if (isupper(*cp)) *cp = tolower(*cp); if (*cp == '\\') *cp = '/'; } - - META_DEBUG(8, ("normalized: %s", path)); #endif }