From d3b4f286fa65c5a8881d595038505229e467bf49 Mon Sep 17 00:00:00 2001 From: Iain Patterson Date: Sat, 21 Dec 2013 16:05:18 +0000 Subject: [PATCH] Fixed Unicode display of GetProcAddress() errors. GetProcAddress() takes char *name as an argument but we were trying to print TCHAR *name when logging that we couldn't find the function pointer. --- imports.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/imports.cpp b/imports.cpp index 947b885..9ffd486 100644 --- a/imports.cpp +++ b/imports.cpp @@ -27,7 +27,19 @@ FARPROC get_import(HMODULE library, const char *function, unsigned long *error) FARPROC ret = GetProcAddress(library, function); if (! ret) { *error = GetLastError(); - log_event(EVENTLOG_WARNING_TYPE, NSSM_EVENT_GETPROCADDRESS_FAILED, function, error_string(*error), 0); + TCHAR *function_name; +#ifdef UNICODE + size_t buflen; + mbstowcs_s(&buflen, NULL, 0, function, _TRUNCATE); + function_name = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, buflen * sizeof(TCHAR)); + if (function_name) mbstowcs_s(&buflen, function_name, buflen, function, _TRUNCATE); +#else + function_name = function; +#endif + log_event(EVENTLOG_WARNING_TYPE, NSSM_EVENT_GETPROCADDRESS_FAILED, function_name, error_string(*error), 0); +#ifdef UNICODE + if (function_name) HeapFree(GetProcessHeap(), 0, function_name); +#endif } return ret; -- 2.7.4