Module: wine Branch: refs/heads/master Commit: 7c35db000b26852fc2bf4a7a7e349953f60d183f URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=7c35db000b26852fc2bf4a7a...
Author: James Hawkins truiken@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