wcmd: modify option-parser to allow compound options
Thomas Kho
tkho at ucla.edu
Fri Jun 30 21:02:31 CDT 2006
wcmd: modify option-parser to allow compound options
Perl's `system` is implemented as `cmd.exe /x/d/c ...`, and this patch allows
parsing of the compound options
Thomas Kho
---
programs/wcmd/wcmdmain.c | 29 +++++++++++++++++++----------
1 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/programs/wcmd/wcmdmain.c b/programs/wcmd/wcmdmain.c
index 8b61445..1af01eb 100644
--- a/programs/wcmd/wcmdmain.c
+++ b/programs/wcmd/wcmdmain.c
@@ -61,21 +61,30 @@ int main (int argc, char *argv[])
opt_c=opt_k=opt_q=0;
while (*argv!=NULL)
{
- if (lstrcmpi(*argv,"/c")==0) {
- opt_c=1;
+ char c;
+ if ((*argv)[0]!='/' || (*argv)[1]=='\0') {
argv++;
- break;
- } else if (lstrcmpi(*argv,"/q")==0) {
+ continue;
+ }
+
+ c=(*argv)[1];
+ if (tolower(c)=='c') {
+ opt_c=1;
+ } else if (tolower(c)=='q') {
opt_q=1;
- } else if (lstrcmpi(*argv,"/k")==0) {
+ } else if (tolower(c)=='k') {
opt_k=1;
- argv++;
- break;
- } else if (lstrcmpi(*argv,"/t")==0 || lstrcmpi(*argv,"/x")==0 ||
- lstrcmpi(*argv,"/y")==0) {
+ } else if (tolower(c)=='t' || tolower(c)=='x' || tolower(c)=='y') {
/* Ignored for compatibility with Windows */
}
- argv++;
+
+ if ((*argv)[2]==0)
+ argv++;
+ else /* handle `cmd /cnotepad.exe` and `cmd /x/c ...` */
+ *argv+=2;
+
+ if (opt_c || opt_k) /* break out of parsing immediately after c or k */
+ break;
}
if (opt_q) {
More information about the wine-patches
mailing list