[PATCH 2/6] regsvr32: Convert the codebase to Unicode
Hugh McMaster
hugh.mcmaster at outlook.com
Sun Jun 7 06:13:55 CDT 2015
Fixes https://bugs.winehq.org/show_bug.cgi?id=38638
---
programs/regsvr32/Makefile.in | 2 +-
programs/regsvr32/regsvr32.c | 46 +++++++++++++++++++------------------------
programs/regsvr32/regsvr32.rc | 2 +-
3 files changed, 22 insertions(+), 28 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 560f834..2190f9d 100644
--- a/programs/regsvr32/regsvr32.c
+++ b/programs/regsvr32/regsvr32.c
@@ -52,10 +52,10 @@
#include "wine/port.h"
#include <string.h>
-#include <ctype.h>
#include <windows.h>
#include <ole2.h>
#include "regsvr32.h"
+#include "wine/unicode.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(regsvr32);
@@ -68,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;
@@ -83,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);
}
@@ -108,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);
@@ -128,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;
@@ -151,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;
@@ -174,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;
@@ -203,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;
BOOL CallRegister = TRUE;
@@ -224,7 +224,7 @@ int main(int argc, char* argv[])
{
if ((argv[i][0] == '/' || argv[i][0] == '-') && (!argv[i][2] || argv[i][2] == ':'))
{
- switch (tolower(argv[i][1]))
+ switch (tolowerW(argv[i][1]))
{
case 'u':
Unregister = TRUE;
@@ -234,12 +234,12 @@ int main(int argc, char* argv[])
break;
case 'i':
{
- CHAR* command_line = argv[i] + strlen("/i");
+ WCHAR* command_line = argv[i] + 2 /* strlen("/i") */;
CallInstall = TRUE;
if (command_line[0] == ':' && command_line[1])
{
- int len = strlen(command_line);
+ int len = lstrlenW(command_line);
command_line++;
len--;
@@ -256,13 +256,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
{
@@ -289,7 +283,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 88ba364..f1fadf3 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! not implemented 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.9.1
More information about the wine-patches
mailing list