[PATCH 1/3] programs/regsvr32: Convert codebase to Unicode (version 2)
Hugh McMaster
hugh.mcmaster at outlook.com
Thu Jun 18 04:29:54 CDT 2015
Changes since version 1:
* Remove #include <string.h>
I am using 'parse_command_line(argv[i] + 2);' instead of calling strlen("/i").
That call to strlen("/i") was the only use of the string.h header,
and it seems wasteful to include the header for that reason alone.
I have inserted a comment /* argv[i] + strlen("/i") */ to avoid any confusion
about what the number 2 means.
Please let me know if you do not want this change and I will resubmit.
---
programs/regsvr32/Makefile.in | 2 +-
programs/regsvr32/regsvr32.c | 47 +++++++++++++++++++------------------------
programs/regsvr32/regsvr32.rc | 2 +-
3 files changed, 23 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 8aa567c..7301b1a 100644
--- a/programs/regsvr32/regsvr32.c
+++ b/programs/regsvr32/regsvr32.c
@@ -51,11 +51,10 @@
#include "config.h"
#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 +67,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 +82,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 +107,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 +127,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 +150,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 +173,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,13 +202,13 @@ static int InstallDll(BOOL install, char *strDll, WCHAR *command_line)
return 0;
}
-static WCHAR *parse_command_line(char *command_line)
+static WCHAR *parse_command_line(WCHAR *command_line)
{
WCHAR *ret = NULL;
if (command_line[0] == ':' && command_line[1])
{
- int len = strlen(command_line);
+ int len = strlenW(command_line);
command_line++;
len--;
@@ -225,16 +224,12 @@ static WCHAR *parse_command_line(char *command_line)
}
}
if (command_line[0])
- {
- len = MultiByteToWideChar(CP_ACP, 0, command_line, -1, NULL, 0);
- ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (ret) MultiByteToWideChar(CP_ACP, 0, command_line, -1, ret, len);
- }
+ ret = command_line;
}
return ret;
}
-int main(int argc, char* argv[])
+int wmain(int argc, WCHAR* argv[])
{
int i;
BOOL CallRegister = TRUE;
@@ -255,7 +250,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;
@@ -265,7 +260,7 @@ int main(int argc, char* argv[])
break;
case 'i':
CallInstall = TRUE;
- wsCommandLine = parse_command_line(argv[i] + strlen("/i"));
+ wsCommandLine = parse_command_line(argv[i] + 2); /* argv[i] + strlen("/i") */
if (!wsCommandLine)
wsCommandLine = EmptyLine;
break;
@@ -283,7 +278,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