added extended error messaging to the loader
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401846
This commit is contained in:
parent
42a313486a
commit
9756e7062f
@ -70,6 +70,29 @@
|
|||||||
HINSTANCE g_hCore = NULL;
|
HINSTANCE g_hCore = NULL;
|
||||||
bool load_attempted = false;
|
bool load_attempted = false;
|
||||||
|
|
||||||
|
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...);
|
||||||
|
|
||||||
|
class FailPlugin : public SourceMM::ISmmFailPlugin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int GetApiVersion()
|
||||||
|
{
|
||||||
|
return fail_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Load(SourceMM::PluginId id, SourceMM::ISmmAPI *ismm, char *error, size_t maxlength, bool late)
|
||||||
|
{
|
||||||
|
if (error != NULL && maxlength != 0)
|
||||||
|
{
|
||||||
|
UTIL_Format(error, maxlength, "%s", error_buffer);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fail_version;
|
||||||
|
char error_buffer[512];
|
||||||
|
} s_FailPlugin;
|
||||||
|
|
||||||
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
|
size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -87,7 +110,7 @@ size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
METAMOD_PLUGIN *_GetPluginPtr(const char *path)
|
METAMOD_PLUGIN *_GetPluginPtr(const char *path, int fail_api)
|
||||||
{
|
{
|
||||||
METAMOD_FN_ORIG_LOAD fn;
|
METAMOD_FN_ORIG_LOAD fn;
|
||||||
METAMOD_PLUGIN *pl;
|
METAMOD_PLUGIN *pl;
|
||||||
@ -95,7 +118,34 @@ METAMOD_PLUGIN *_GetPluginPtr(const char *path)
|
|||||||
|
|
||||||
if (!(g_hCore=openlib(path)))
|
if (!(g_hCore=openlib(path)))
|
||||||
{
|
{
|
||||||
return NULL;
|
#if defined __linux__
|
||||||
|
UTIL_Format(s_FailPlugin.error_buffer,
|
||||||
|
sizeof(s_FailPlugin.error_buffer),
|
||||||
|
"%s",
|
||||||
|
dlerror());
|
||||||
|
#else
|
||||||
|
DWORD err = GetLastError();
|
||||||
|
|
||||||
|
if (FormatMessageA(
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
err,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
s_FailPlugin.error_buffer,
|
||||||
|
sizeof(s_FailPlugin.error_buffer),
|
||||||
|
NULL)
|
||||||
|
== 0)
|
||||||
|
{
|
||||||
|
UTIL_Format(s_FailPlugin.error_buffer,
|
||||||
|
sizeof(s_FailPlugin.error_buffer),
|
||||||
|
"unknown error %x",
|
||||||
|
err);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
s_FailPlugin.fail_version = fail_api;
|
||||||
|
|
||||||
|
return (METAMOD_PLUGIN *)&s_FailPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(fn=(METAMOD_FN_ORIG_LOAD)findsym(g_hCore, "CreateInterface")))
|
if (!(fn=(METAMOD_FN_ORIG_LOAD)findsym(g_hCore, "CreateInterface")))
|
||||||
@ -171,7 +221,7 @@ DLL_EXPORT METAMOD_PLUGIN *CreateInterface_MMS(const MetamodVersionInfo *mvi, co
|
|||||||
char abspath[256];
|
char abspath[256];
|
||||||
UTIL_Format(abspath, sizeof(abspath), "%s" PATH_SEP_CHAR "%s", mli->pl_path, filename);
|
UTIL_Format(abspath, sizeof(abspath), "%s" PATH_SEP_CHAR "%s", mli->pl_path, filename);
|
||||||
|
|
||||||
return _GetPluginPtr(abspath);
|
return _GetPluginPtr(abspath, METAMOD_FAIL_API_V2);
|
||||||
}
|
}
|
||||||
|
|
||||||
DLL_EXPORT void UnloadInterface_MMS()
|
DLL_EXPORT void UnloadInterface_MMS()
|
||||||
@ -215,7 +265,7 @@ DLL_EXPORT void *CreateInterface(const char *iface, int *ret)
|
|||||||
|
|
||||||
UTIL_Format(targetfile, sizeof(targetfile), "%s" PATH_SEP_CHAR FILENAME_1_4_EP1, thisfile);
|
UTIL_Format(targetfile, sizeof(targetfile), "%s" PATH_SEP_CHAR FILENAME_1_4_EP1, thisfile);
|
||||||
|
|
||||||
return _GetPluginPtr(targetfile);
|
return _GetPluginPtr(targetfile, METAMOD_FAIL_API_V1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user