Module: wine Branch: master Commit: 50110d4bbde7589155284880a57a6ffdb283b233 URL: http://source.winehq.org/git/wine.git/?a=commit;h=50110d4bbde7589155284880a5...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Oct 4 14:59:41 2011 -0500
mspatcha: Forward ApplyPatchToFileA to ApplyPatchToFileW.
---
dlls/mspatcha/mspatcha.spec | 2 +- dlls/mspatcha/mspatcha_main.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/dlls/mspatcha/mspatcha.spec b/dlls/mspatcha/mspatcha.spec index ca9bc7d..40feedf 100644 --- a/dlls/mspatcha/mspatcha.spec +++ b/dlls/mspatcha/mspatcha.spec @@ -1,4 +1,4 @@ -1 stub ApplyPatchToFileA +1 stdcall ApplyPatchToFileA(str str str long) 2 stub ApplyPatchToFileByHandles 3 stub ApplyPatchToFileByHandlesEx 4 stub ApplyPatchToFileExA diff --git a/dlls/mspatcha/mspatcha_main.c b/dlls/mspatcha/mspatcha_main.c index 0110a41..ed763c9 100644 --- a/dlls/mspatcha/mspatcha_main.c +++ b/dlls/mspatcha/mspatcha_main.c @@ -24,6 +24,8 @@
#include "windef.h" #include "winbase.h" +#include "winnls.h" +#include "patchapi.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mspatcha); @@ -49,6 +51,45 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) return TRUE; }
+static inline WCHAR *strdupAW( const char *src ) +{ + WCHAR *dst = NULL; + if (src) + { + int len = MultiByteToWideChar( CP_ACP, 0, src, -1, NULL, 0 ); + if ((dst = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) + MultiByteToWideChar( CP_ACP, 0, src, -1, dst, len ); + } + return dst; +} + +/***************************************************** + * ApplyPatchToFileA (MSPATCHA.6) + */ +BOOL WINAPI ApplyPatchToFileA(LPCSTR patch_file, LPCSTR old_file, LPCSTR new_file, ULONG apply_flags) +{ + BOOL ret; + WCHAR *patch_fileW, *new_fileW, *old_fileW = NULL; + + if (!(patch_fileW = strdupAW( patch_file ))) return FALSE; + if (old_file && !(old_fileW = strdupAW( old_file ))) + { + HeapFree( GetProcessHeap(), 0, patch_fileW ); + return FALSE; + } + if (!(new_fileW = strdupAW( new_file ))) + { + HeapFree( GetProcessHeap(), 0, patch_fileW ); + HeapFree( GetProcessHeap(), 0, old_fileW ); + return FALSE; + } + ret = ApplyPatchToFileW( patch_fileW, old_fileW, new_fileW, apply_flags ); + HeapFree( GetProcessHeap(), 0, patch_fileW ); + HeapFree( GetProcessHeap(), 0, old_fileW ); + HeapFree( GetProcessHeap(), 0, new_fileW ); + return ret; +} + /***************************************************** * ApplyPatchToFileW (MSPATCHA.6) */