[PATCH 3/5] programs/regsvr32: Convert source to Unicode for internationalial output
Hugh McMaster
hugh.mcmaster at outlook.com
Thu May 28 06:14:18 CDT 2015
Fixes https://bugs.winehq.org/show_bug.cgi?id=38638
---
programs/regsvr32/Makefile.in | 2 +-
programs/regsvr32/regsvr32.c | 47 ++++++++++++++++++-------------------------
programs/regsvr32/regsvr32.rc | 2 +-
3 files changed, 22 insertions(+), 29 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 181019b..9cb360c 100644
--- a/programs/regsvr32/regsvr32.c
+++ b/programs/regsvr32/regsvr32.c
@@ -55,6 +55,7 @@
#include <windows.h>
#include <ole2.h>
#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
* pDllHandle - 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] + strlen("/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,15 +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;
}
@@ -280,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 88ba364..3169b71 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