Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7c35db00
Commit
7c35db00
authored
Jun 26, 2006
by
James Hawkins
Committed by
Alexandre Julliard
Jun 27, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msiexec: Use CommandLineToArgvW instead of process_args to reduce code duplication.
parent
27c6c83e
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
4 additions
and
102 deletions
+4
-102
Makefile.in
programs/msiexec/Makefile.in
+1
-1
msiexec.c
programs/msiexec/msiexec.c
+3
-101
No files found.
programs/msiexec/Makefile.in
View file @
7c35db00
...
...
@@ -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
=
\
...
...
programs/msiexec/msiexec.c
View file @
7c35db00
...
...
@@ -25,6 +25,7 @@
#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(LPCWSTR DllName)
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( LPWSTR ident, int *pargc, WCHAR ***pargv )
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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment