Frédéric Delanoy : cmd: Fix handling of lines starting with echo. or echo:.

Alexandre Julliard julliard at winehq.org
Fri Aug 5 10:20:51 CDT 2011


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

Author: Frédéric Delanoy <frederic.delanoy at gmail.com>
Date:   Fri Aug  5 16:29:21 2011 +0200

cmd: Fix handling of lines starting with echo. or echo:.

---

 programs/cmd/tests/test_builtins.cmd.exp |    8 ++++----
 programs/cmd/wcmdmain.c                  |   14 +++++++++++++-
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index ec0ece4..7ebe57a 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -18,25 +18,25 @@ at-echoed-word
 @pwd@>echo "/?"@space@
 "/?"
 
- at todo_wine@@pwd@>echo.
+ at pwd@>echo.
 
 
 @pwd@>echo . at space@
 .
 
- at todo_wine@@pwd@>echo.word
+ at pwd@>echo.word
 word
 
 @pwd@>echo .word at space@
 .word
 
- at todo_wine@@pwd@>echo:
+ at pwd@>echo:
 
 
 @pwd@>echo :@space@
 :
 
- at todo_wine@@pwd@>echo:word
+ at pwd@>echo:word
 word
 
 @pwd@>echo :word at space@
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 5dbf74c..0111c15 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1786,10 +1786,22 @@ WCHAR *WCMD_ReadAndParseLine(WCHAR *optionalcmd, CMD_LIST **output, HANDLE readF
     /* Show prompt before batch line IF echo is on and in batch program */
     if (context && echo_mode && extraSpace[0] && (extraSpace[0] != '@')) {
       const WCHAR spc[]={' ','\0'};
+      const WCHAR echoDot[] = {'e','c','h','o','.'};
+      const WCHAR echoCol[] = {'e','c','h','o',':'};
+      const DWORD len = sizeof(echoDot)/sizeof(echoDot[0]);
+      DWORD curr_size = strlenW(extraSpace);
+      DWORD min_len = (curr_size < len ? curr_size : len);
       WCMD_show_prompt();
       WCMD_output_asis(extraSpace);
       /* I don't know why Windows puts a space here but it does */
-      WCMD_output_asis(spc);
+      /* Except for lines starting with 'echo.' or 'echo:'. Ask MS why */
+      if (CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
+                         extraSpace, min_len, echoDot, len) != CSTR_EQUAL
+          && CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
+                         extraSpace, min_len, echoCol, len) != CSTR_EQUAL)
+      {
+          WCMD_output_asis(spc);
+      }
       WCMD_output_asis(newline);
     }
 




More information about the wine-cvs mailing list