From a07bc80d2e95e308b788d3a82b6617f904c36986 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Tue, 13 Jan 2004 18:16:05 +0000 Subject: [PATCH] - Fixed the handling of command line parameters between quotes. svn path=/trunk/; revision=7611 --- reactos/lib/msvcrt/misc/getargs.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/reactos/lib/msvcrt/misc/getargs.c b/reactos/lib/msvcrt/misc/getargs.c index c1cf4ec7e5f..ad0d2173499 100644 --- a/reactos/lib/msvcrt/misc/getargs.c +++ b/reactos/lib/msvcrt/misc/getargs.c @@ -92,45 +92,44 @@ int expand(char* name, int flag) */ int __getmainargs(int* argc, char*** argv, char*** env, int flag) { - int i, afterlastspace, ignorespace, len; + int i, afterlastspace, ignorespace, len, doexpand; /* missing threading init */ i = 0; afterlastspace = 0; ignorespace = 0; + doexpand = flag; + len = strlen(_acmdln); while (_acmdln[i]) { if (_acmdln[i] == '"') { - if (_acmdln[i + 1] == '"') { - memmove(_acmdln + i, _acmdln + i + 1, len - i); - len--; + if(ignorespace) { + ignorespace = 0; } else { - if(ignorespace) { - ignorespace = 0; - } else { - ignorespace = 1; - } - memmove(_acmdln + i, _acmdln + i + 1, len - i); - len--; - continue; + ignorespace = 1; + doexpand = 0; } + memmove(_acmdln + i, _acmdln + i + 1, len - i); + len--; + continue; } if (_acmdln[i] == ' ' && !ignorespace) { - expand(strndup(_acmdln + afterlastspace, i - afterlastspace), flag); + expand(strndup(_acmdln + afterlastspace, i - afterlastspace), doexpand); i++; while (_acmdln[i]==' ') i++; afterlastspace=i; + doexpand = flag; } else { i++; } } if (_acmdln[afterlastspace] != 0) { - expand(strndup(_acmdln+afterlastspace, i - afterlastspace), flag); + expand(strndup(_acmdln+afterlastspace, i - afterlastspace), doexpand); } HeapValidate(hHeap, 0, NULL); *argc = __argc;