Erich Hoover : wcmd: Handle batch scripts containing quotes within quotes.
Alexandre Julliard
julliard at winehq.org
Tue Jan 13 10:56:40 CST 2009
Module: wine
Branch: master
Commit: 423929ad1096319a7788ceac1dc4b338c82cbd2a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=423929ad1096319a7788ceac1dc4b338c82cbd2a
Author: Erich Hoover <ehoover at mines.edu>
Date: Sun Jan 11 15:47:53 2009 -0700
wcmd: Handle batch scripts containing quotes within quotes.
---
programs/cmd/wcmdmain.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 4c513fb..595dbc8 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1676,7 +1676,7 @@ static void WCMD_addCommand(WCHAR *command, int *commandLen,
WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readFrom) {
WCHAR *curPos;
- BOOL inQuotes = FALSE;
+ int inQuotes = 0;
WCHAR curString[MAXSTRING];
int curStringLen = 0;
WCHAR curRedirs[MAXSTRING];
@@ -1900,7 +1900,11 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
}
break;
- case '"': inQuotes = !inQuotes;
+ case '"': if (inQuotes && *(curPos+1) == ' ') {
+ inQuotes--; /* An end quote must be proceeded by a space */
+ } else {
+ inQuotes++; /* Quotes within quotes are fun! */
+ }
curCopyTo[(*curLen)++] = *curPos;
lastWasRedirect = FALSE;
break;
@@ -2042,7 +2046,7 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
if (*curPos == 0x00 && curDepth > 0 && readFrom != INVALID_HANDLE_VALUE) {
inRem = FALSE;
prevDelim = CMD_NONE;
- inQuotes = FALSE;
+ inQuotes = 0;
memset(extraSpace, 0x00, (MAXSTRING+1) * sizeof(WCHAR));
/* Read more, skipping any blank lines */
More information about the wine-cvs
mailing list