From: Hugh McMaster Subject: [Patch 2/2] regsvr32: Convert source to Unicode Message-Id: Date: Thu, 7 Aug 2014 23:39:58 +1000 This patch converts programs/regsvr32/regsvr32.c to Unicode. As the patch is the second in this series, the conversion is far more straightforward compared to previous attempts. Thank you to Michael Stefaniuc for answering many questions about Wine's coding style. Changelog: regsvr32: Convert source to Unicode. From d89294513da977a0d7dbe04be075db1351992b24 Mon Sep 17 00:00:00 2001 From: Hugh McMaster Date: Thu, 7 Aug 2014 23:18:20 +1000 Subject: [PATCH 2/2] regsvr32: Convert to Unicode --- programs/regsvr32/Makefile.in | 2 +- programs/regsvr32/regsvr32.c | 44 ++++++++++++++++++++----------------------- programs/regsvr32/regsvr32.rc | 2 +- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/programs/regsvr32/Makefile.in b/programs/regsvr32/Makefile.in index db567ea..b99db28 100644 --- a/programs/regsvr32/Makefile.in +++ b/programs/regsvr32/Makefile.in @@ -1,5 +1,5 @@ MODULE = regsvr32.exe -APPMODE = -mconsole +APPMODE = -mconsole -municode IMPORTS = ole32 user32 C_SRCS = \ diff --git a/programs/regsvr32/regsvr32.c b/programs/regsvr32/regsvr32.c index 88e9e8f..d83310a 100644 --- a/programs/regsvr32/regsvr32.c +++ b/programs/regsvr32/regsvr32.c @@ -55,6 +55,7 @@ #include #include #include "regsvr32.h" +#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(regsvr32); @@ -67,14 +68,14 @@ static BOOL Silent = FALSE; static void __cdecl output_write(UINT id, ...) { - char fmt[1024]; + WCHAR fmt[1024]; __ms_va_list va_args; - char *str; + WCHAR *str; DWORD len, nOut, ret; if (Silent) return; - if (!LoadStringA(GetModuleHandleA(NULL), id, fmt, sizeof(fmt)/sizeof(fmt[0]))) + if (!LoadStringW(GetModuleHandleW(NULL), id, fmt, sizeof(fmt)/sizeof(fmt[0]))) { WINE_FIXME("LoadString failed with %d\n", GetLastError()); return; @@ -82,19 +83,19 @@ static void __cdecl output_write(UINT id, ...) __ms_va_start(va_args, id); SetLastError(NO_ERROR); - len = FormatMessageA(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER, - fmt, 0, 0, (LPSTR)&str, 0, &va_args); + len = FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER, + fmt, 0, 0, (LPWSTR)&str, 0, &va_args); __ms_va_end(va_args); if (len == 0 && GetLastError() != NO_ERROR) { - WINE_FIXME("Could not format string: le=%u, fmt=%s\n", GetLastError(), wine_dbgstr_a(fmt)); + WINE_FIXME("Could not format string: le=%u, fmt=%s\n", GetLastError(), wine_dbgstr_w(fmt)); return; } - ret = WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), str, len, &nOut, NULL); + ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, len, &nOut, NULL); if (!ret) - WINE_WARN("regsvr32: WriteConsoleA() failed.\n"); + WINE_WARN("regsvr32: WriteConsoleW() failed.\n"); LocalFree(str); } @@ -107,11 +108,11 @@ static void __cdecl output_write(UINT id, ...) * procName - name of the procedure to load from dll * pDllHanlde - output variable receives handle of the loaded dll. */ -static VOID *LoadProc(const char* strDll, const char* procName, HMODULE* DllHandle) +static VOID *LoadProc(const WCHAR* strDll, const char* procName, HMODULE* DllHandle) { VOID* (*proc)(void); - *DllHandle = LoadLibraryExA(strDll, 0, LOAD_WITH_ALTERED_SEARCH_PATH); + *DllHandle = LoadLibraryExW(strDll, 0, LOAD_WITH_ALTERED_SEARCH_PATH); if(!*DllHandle) { output_write(STRING_DLL_LOAD_FAILED, strDll); @@ -127,7 +128,7 @@ static VOID *LoadProc(const char* strDll, const char* procName, HMODULE* DllHand return proc; } -static int RegisterDll(const char* strDll) +static int RegisterDll(const WCHAR* strDll) { HRESULT hr; DLLREGISTER pfRegister; @@ -150,7 +151,7 @@ static int RegisterDll(const char* strDll) return 0; } -static int UnregisterDll(char* strDll) +static int UnregisterDll(WCHAR* strDll) { HRESULT hr; DLLUNREGISTER pfUnregister; @@ -173,7 +174,7 @@ static int UnregisterDll(char* strDll) return 0; } -static int InstallDll(BOOL install, char *strDll, WCHAR *command_line) +static int InstallDll(BOOL install, WCHAR *strDll, WCHAR *command_line) { HRESULT hr; DLLINSTALL pfInstall; @@ -202,7 +203,7 @@ static int InstallDll(BOOL install, char *strDll, WCHAR *command_line) return 0; } -int main(int argc, char* argv[]) +int wmain(int argc, WCHAR* argv[]) { int i, ch; BOOL CallRegister = TRUE; @@ -223,7 +224,7 @@ int main(int argc, char* argv[]) { if ((argv[i][0] == '/' || argv[i][0] == '-') && (!argv[i][2] || argv[i][2] == ':')) { - ch = tolower(argv[i][1]); + ch = tolowerW(argv[i][1]); if (ch == 'u') Unregister = TRUE; @@ -235,12 +236,12 @@ int main(int argc, char* argv[]) /* console output */; else if (ch == 'i') { - char* command_line = argv[i] + 2; /* "/i" */ + WCHAR* command_line = argv[i] + 2; /* "/i" */ CallInstall = TRUE; if (command_line[0] == ':' && command_line[1]) { - int len = strlen(command_line); + int len = lstrlenW(command_line); command_line++; len--; @@ -256,12 +257,7 @@ int main(int argc, char* argv[]) } } if (command_line[0]) - { - len = MultiByteToWideChar(CP_ACP, 0, command_line, -1, NULL, 0); - wsCommandLine = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - if (wsCommandLine) - MultiByteToWideChar(CP_ACP, 0, command_line, -1, wsCommandLine, len); - } + wsCommandLine = command_line; else wsCommandLine = EmptyLine; } @@ -277,7 +273,7 @@ int main(int argc, char* argv[]) } else { - char *DllName = argv[i]; + WCHAR *DllName = argv[i]; int res = 0; DllFound = TRUE; diff --git a/programs/regsvr32/regsvr32.rc b/programs/regsvr32/regsvr32.rc index 9b951b1..1bcb2f3 100644 --- a/programs/regsvr32/regsvr32.rc +++ b/programs/regsvr32/regsvr32.rc @@ -39,7 +39,7 @@ Options:\n\ \ [/n] Do not call DllRegisterServer. This option must be used with [/i].\n\n" STRING_UNRECOGNIZED_SWITCH, "regsvr32: Invalid or unrecognized switch [%1]\n\n" STRING_DLL_LOAD_FAILED, "regsvr32: Failed to load DLL '%1'\n" - STRING_PROC_NOT_IMPLEMENTED, "regsvr32: %1 not implemented in DLL '%2'\n" + STRING_PROC_NOT_IMPLEMENTED, "regsvr32: '%1!S!' was not found in DLL '%2'\n" STRING_REGISTER_FAILED, "regsvr32: Failed to register DLL '%1'\n" STRING_REGISTER_SUCCESSFUL, "regsvr32: Successfully registered DLL '%1'\n" STRING_UNREGISTER_FAILED, "regsvr32: Failed to unregister DLL '%1'\n" -- 1.8.3.2