Jason Edmeades : cmd.exe: Lines starting with REM ignore any multiline/ part characters.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 18 08:05:12 CDT 2007


Module: wine
Branch: master
Commit: de4c6970a31782b004fae5d83399fda20bdd2747
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=de4c6970a31782b004fae5d83399fda20bdd2747

Author: Jason Edmeades <jason.edmeades at googlemail.com>
Date:   Fri Jun 15 20:59:23 2007 +0100

cmd.exe: Lines starting with REM ignore any multiline/part characters.

---

 programs/cmd/wcmdmain.c |   24 +++++++++++++++++++++++-
 1 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 30c1921..1addd55 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1907,6 +1907,8 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
     CMD_LIST *lastEntry = NULL;
     BOOL      isAmphersand = FALSE;
     static WCHAR    *extraSpace = NULL;  /* Deliberately never freed */
+    const WCHAR rem[] = {'r','e','m',' ','\0'};
+    BOOL      inRem = FALSE;
 
     /* Allocate working space for a command read from keyboard, file etc */
     if (!extraSpace)
@@ -1934,7 +1936,26 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
 
     /* Parse every character on the line being processed */
     while (*curPos != 0x00) {
-      switch (*curPos) {
+
+      WCHAR thisChar;
+
+      /* If command starts with 'rem', ignore any &&, ( etc */
+      if (curLen == 0 && !inRem) {
+        if (CompareString (LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT,
+          curPos, 4, rem, -1) == 2) {
+          inRem = TRUE;
+        } else {
+          inRem = FALSE;
+        }
+      }
+
+      /* Nothing 'ends' a REM statement and &&, quotes etc are ineffective,
+         so just use the default processing ie skip character specific
+         matching below                                                    */
+      if (!inRem) thisChar = *curPos;
+      else        thisChar = 'X';  /* Character with no special processing */
+
+      switch (thisChar) {
 
       case '\t':/* drop through - ignore whitespace at the start of a command */
       case ' ': if (curLen > 0)
@@ -2043,6 +2064,7 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
 
       /* If we have reached the end of the string, see if bracketing outstanding */
       if (*curPos == 0x00 && curDepth > 0 && readFrom != INVALID_HANDLE_VALUE) {
+        inRem = FALSE;
         isAmphersand = FALSE;
         inQuotes = FALSE;
         memset(extraSpace, 0x00, (MAXSTRING+1) * sizeof(WCHAR));




More information about the wine-cvs mailing list