Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/wdscore/main.c | 48 +++++++++++++++++++++++++++++++++++++++ dlls/wdscore/wdscore.spec | 2 +- include/wdscore.h | 1 + 3 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/dlls/wdscore/main.c b/dlls/wdscore/main.c index 8ebcedfba6b..92d1ffefeb5 100644 --- a/dlls/wdscore/main.c +++ b/dlls/wdscore/main.c @@ -86,6 +86,54 @@ LPVOID WINAPI ConstructPartialMsgVW( WdsLogLevel level, LPCWSTR msg, va_list arg return NULL; }
+/*********************************************************************** + * WdsSetupLogMessageA (wdscore.@) + */ +HRESULT WINAPI WdsSetupLogMessageA( LPVOID msg, WdsLogSource src, LPCSTR str1, LPCSTR str2, + ULONG unk1, LPCSTR file, LPCSTR func, void *ip, + ULONG unk2, void *unk3, UINT unk4 ) +{ + DWORD len; + HRESULT ret; + LPWSTR str1W = NULL; + LPWSTR str2W = NULL; + LPWSTR fileW = NULL; + LPWSTR funcW = NULL; + + if(str1) + { + len = MultiByteToWideChar( CP_ACP, 0, str1, -1, NULL, 0 ); + str1W = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, str1, -1, str1W, len ); + } + if(str2) + { + len = MultiByteToWideChar( CP_ACP, 0, str2, -1, NULL, 0 ); + str2W = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, str2, -1, str2W, len ); + } + if(file) + { + len = MultiByteToWideChar( CP_ACP, 0, file, -1, NULL, 0 ); + fileW = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, file, -1, fileW, len ); + } + if(func) + { + len = MultiByteToWideChar( CP_ACP, 0, func, -1, NULL, 0 ); + funcW = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, func, -1, funcW, len ); + } + + ret = WdsSetupLogMessageW( msg, src, str1W, str2W, unk1, fileW, funcW, ip, unk2, unk3, unk4 ); + + HeapFree( GetProcessHeap(), 0, str1W ); + HeapFree( GetProcessHeap(), 0, str2W ); + HeapFree( GetProcessHeap(), 0, fileW ); + HeapFree( GetProcessHeap(), 0, funcW ); + return ret; +} + /*********************************************************************** * WdsSetupLogMessageW (wdscore.@) */ diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index f1a807b86e6..938f27b776c 100644 --- a/dlls/wdscore/wdscore.spec +++ b/dlls/wdscore/wdscore.spec @@ -150,7 +150,7 @@ @ stub WdsSetUILanguage @ stub WdsSetupLogDestroy @ stub WdsSetupLogInit -@ stub WdsSetLogMessageA +@ stdcall WdsSetupLogMessageA(ptr long str str long str str ptr long ptr long) @ stdcall WdsSetupLogMessageW(ptr long wstr wstr long wstr wstr ptr long ptr long) @ stub WdsSubscribeEx @ stub WdsTerminate diff --git a/include/wdscore.h b/include/wdscore.h index 0c357f7e3a4..fe61fda2e26 100644 --- a/include/wdscore.h +++ b/include/wdscore.h @@ -64,6 +64,7 @@ typedef enum _WdsLogSource { LPVOID CurrentIP(void); LPVOID WINAPI ConstructPartialMsgVA(WdsLogLevel,LPCSTR,va_list); LPVOID WINAPI ConstructPartialMsgVW(WdsLogLevel,LPCWSTR,va_list); +HRESULT WINAPI WdsSetupLogMessageA(LPVOID,WdsLogSource,LPCSTR,LPCSTR,ULONG,LPCSTR,LPCSTR,void*,ULONG,void*,UINT); HRESULT WINAPI WdsSetupLogMessageW(LPVOID,WdsLogSource,LPCWSTR,LPCWSTR,ULONG,LPCWSTR,LPCWSTR,void*,ULONG,void*,UINT);
#ifdef __cplusplus