cmd.exe: Allow = and , to be delimiters.

This commit is contained in:
Jason Edmeades 2007-09-11 21:43:04 +01:00 committed by Alexandre Julliard
parent b69241124e
commit 118f3a6592
1 changed files with 9 additions and 4 deletions

View File

@ -134,7 +134,7 @@ void WCMD_batch (WCHAR *file, WCHAR *command, int called, WCHAR *startLabel, HAN
/******************************************************************* /*******************************************************************
* WCMD_parameter - extract a parameter from a command line. * WCMD_parameter - extract a parameter from a command line.
* *
* Returns the 'n'th space-delimited parameter on the command line (zero-based). * Returns the 'n'th delimited parameter on the command line (zero-based).
* Parameter is in static storage overwritten on the next call. * Parameter is in static storage overwritten on the next call.
* Parameters in quotes (and brackets) are handled. * Parameters in quotes (and brackets) are handled.
* Also returns a pointer to the location of the parameter in the command line. * Also returns a pointer to the location of the parameter in the command line.
@ -150,7 +150,7 @@ WCHAR *WCMD_parameter (WCHAR *s, int n, WCHAR **where) {
p = param; p = param;
while (TRUE) { while (TRUE) {
switch (*s) { switch (*s) {
case ' ': case ' ': /* Skip leading spaces */
s++; s++;
break; break;
case '"': case '"':
@ -176,15 +176,20 @@ WCHAR *WCMD_parameter (WCHAR *s, int n, WCHAR **where) {
default: default:
/* Only return where if it is for the right parameter */ /* Only return where if it is for the right parameter */
if (where != NULL && i==n) *where = s; if (where != NULL && i==n) *where = s;
while ((*s != '\0') && (*s != ' ')) { while ((*s != '\0') && (*s != ' ') && (*s != ',') && (*s != '=')) {
*p++ = *s++; *p++ = *s++;
} }
if (i == n) { if (i == n && (p!=param)) {
*p = '\0'; *p = '\0';
return param; return param;
} }
/* Skip double delimiters, eg. dir a.a,,,,,b.b */
if (p != param) {
param[0] = '\0'; param[0] = '\0';
i++; i++;
} else {
s++; /* Skip delimter */
}
p = param; p = param;
} }
} }