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