James Hawkins : msiexec:
Use CommandLineToArgvW instead of process_args to reduce code
duplication.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jun 27 15:49:09 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 7c35db000b26852fc2bf4a7a7e349953f60d183f
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=7c35db000b26852fc2bf4a7a7e349953f60d183f
Author: James Hawkins <truiken at gmail.com>
Date: Mon Jun 26 14:53:32 2006 -0700
msiexec: Use CommandLineToArgvW instead of process_args to reduce code duplication.
---
programs/msiexec/Makefile.in | 2 -
programs/msiexec/msiexec.c | 104 +-----------------------------------------
2 files changed, 4 insertions(+), 102 deletions(-)
diff --git a/programs/msiexec/Makefile.in b/programs/msiexec/Makefile.in
index 22815a0..2ddd272 100644
--- a/programs/msiexec/Makefile.in
+++ b/programs/msiexec/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = msiexec.exe
APPMODE = -mconsole
-IMPORTS = msi ole32 advapi32 user32 kernel32
+IMPORTS = msi shell32 ole32 advapi32 user32 kernel32
EXTRALIBS = $(LIBUNICODE)
C_SRCS = \
diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c
index 809b38f..d637216 100644
--- a/programs/msiexec/msiexec.c
+++ b/programs/msiexec/msiexec.c
@@ -25,6 +25,7 @@ #include <windows.h>
#include <msi.h>
#include <objbase.h>
#include <stdio.h>
+#include <shellapi.h>
#include "wine/debug.h"
#include "wine/unicode.h"
@@ -210,14 +211,6 @@ static DWORD msi_atou(LPCWSTR str)
return 0;
}
-static LPWSTR msi_strdup(LPCWSTR str)
-{
- DWORD len = lstrlenW(str)+1;
- LPWSTR ret = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*len);
- lstrcpyW(ret, str);
- return ret;
-}
-
/* str1 is the same as str2, ignoring case */
static BOOL msi_strequal(LPCWSTR str1, LPCSTR str2)
{
@@ -316,97 +309,6 @@ static DWORD DoDllUnregisterServer(LPCWS
return 0;
}
-/*
- * state machine to break up the command line properly
- */
-
-enum chomp_state
-{
- cs_whitespace,
- cs_token,
- cs_quote
-};
-
-static int chomp( WCHAR *str )
-{
- enum chomp_state state = cs_whitespace;
- WCHAR *p, *out;
- int count = 0, ignore;
-
- for( p = str, out = str; *p; p++ )
- {
- ignore = 1;
- switch( state )
- {
- case cs_whitespace:
- switch( *p )
- {
- case ' ':
- break;
- case '"':
- state = cs_quote;
- count++;
- break;
- default:
- count++;
- ignore = 0;
- state = cs_token;
- }
- break;
-
- case cs_token:
- switch( *p )
- {
- case '"':
- state = cs_quote;
- break;
- case ' ':
- state = cs_whitespace;
- *out++ = 0;
- break;
- default:
- ignore = 0;
- }
- break;
-
- case cs_quote:
- switch( *p )
- {
- case '"':
- state = cs_token;
- break;
- default:
- ignore = 0;
- }
- break;
- }
- if( !ignore )
- *out++ = *p;
- }
-
- *out = 0;
-
- return count;
-}
-
-static void process_args( WCHAR *cmdline, int *pargc, WCHAR ***pargv )
-{
- WCHAR **argv, *p = msi_strdup(cmdline);
- int i, n;
-
- n = chomp( p );
- argv = HeapAlloc(GetProcessHeap(), 0, sizeof (WCHAR*)*(n+1));
- for( i=0; i<n; i++ )
- {
- argv[i] = p;
- p += lstrlenW(p) + 1;
- }
- argv[i] = NULL;
-
- *pargc = n;
- *pargv = argv;
-}
-
static BOOL process_args_from_reg( LPWSTR ident, int *pargc, WCHAR ***pargv )
{
LONG r;
@@ -425,7 +327,7 @@ static BOOL process_args_from_reg( LPWST
r = RegQueryValueExW(hkey, ident, 0, &type, (LPBYTE)buf, &sz);
if( r == ERROR_SUCCESS )
{
- process_args(buf, pargc, pargv);
+ *pargv = CommandLineToArgvW(buf, pargc);
ret = TRUE;
}
}
@@ -471,7 +373,7 @@ int main(int argc, char **argv)
LPWSTR *argvW = NULL;
/* overwrite the command line */
- process_args( GetCommandLineW(), &argc, &argvW );
+ argvW = CommandLineToArgvW( GetCommandLineW(), &argc );
/*
* If the args begin with /@ IDENT then we need to load the real
More information about the wine-cvs
mailing list