Thomas Faller : cmd: Implement 'echo/'.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 19 09:56:01 CDT 2015


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

Author: Thomas Faller <tfaller1 at gmx.de>
Date:   Tue Aug 18 15:54:43 2015 +0200

cmd: Implement 'echo/'.

---

 programs/cmd/builtins.c                  |  4 ++--
 programs/cmd/tests/test_builtins.cmd     |  8 ++++++++
 programs/cmd/tests/test_builtins.cmd.exp | 16 ++++++++++++++++
 programs/cmd/wcmdmain.c                  |  7 +++++--
 4 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index b124876..5661c69 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1465,7 +1465,7 @@ void WCMD_echo (const WCHAR *args)
   WCHAR *trimmed;
 
   if (   args[0]==' ' || args[0]=='\t' || args[0]=='.'
-      || args[0]==':' || args[0]==';')
+      || args[0]==':' || args[0]==';'  || args[0]=='/')
     args++;
 
   trimmed = WCMD_strtrim(args);
@@ -1473,7 +1473,7 @@ void WCMD_echo (const WCHAR *args)
 
   count = strlenW(trimmed);
   if (count == 0 && origcommand[0]!='.' && origcommand[0]!=':'
-                 && origcommand[0]!=';') {
+                 && origcommand[0]!=';' && origcommand[0]!='/') {
     if (echo_mode) WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), onW);
     else WCMD_output (WCMD_LoadMessage(WCMD_ECHOPROMPT), offW);
     heap_free(trimmed);
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 5351e9c..0a8a4f4 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -15,6 +15,10 @@ echo:
 echo :
 echo:word
 echo :word
+echo/
+echo /
+echo/word
+echo /word
 echo off now
 echo word at space@
 echo word at space@@space@
@@ -47,6 +51,10 @@ echo:
 echo :
 echo:word
 echo :word
+echo/
+echo /
+echo/word
+echo /word
 echo on again
 echo word at space@
 echo word at space@@space@
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 4dddc71..b222158 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -42,6 +42,18 @@ word
 @pwd@>echo :word at space@
 :word
 
+ at pwd@>echo/
+
+
+ at pwd@>echo /@space@
+/
+
+ at pwd@>echo/word
+word
+
+ at pwd@>echo /word at space@
+/word
+
 @pwd@>echo off now at space@
 off now
 
@@ -93,6 +105,10 @@ word
 :
 word
 :word
+
+/
+word
+/word
 on again
 word at space@
 word at space@@space@
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 1e42c47..7666329 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1853,17 +1853,20 @@ WCHAR *WCMD_ReadAndParseLine(const WCHAR *optionalcmd, CMD_LIST **output, HANDLE
     if (context && echo_mode && *curPos && (*curPos != '@')) {
       static const WCHAR echoDot[] = {'e','c','h','o','.'};
       static const WCHAR echoCol[] = {'e','c','h','o',':'};
+      static const WCHAR echoSlash[] = {'e','c','h','o','/'};
       const DWORD len = sizeof(echoDot)/sizeof(echoDot[0]);
       DWORD curr_size = strlenW(curPos);
       DWORD min_len = (curr_size < len ? curr_size : len);
       WCMD_show_prompt();
       WCMD_output_asis(curPos);
       /* I don't know why Windows puts a space here but it does */
-      /* Except for lines starting with 'echo.' or 'echo:'. Ask MS why */
+      /* Except for lines starting with 'echo.', 'echo:' or 'echo/'. Ask MS why */
       if (CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
                          curPos, min_len, echoDot, len) != CSTR_EQUAL
           && CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
-                         curPos, min_len, echoCol, len) != CSTR_EQUAL)
+                         curPos, min_len, echoCol, len) != CSTR_EQUAL
+          && CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
+                         curPos, min_len, echoSlash, len) != CSTR_EQUAL)
       {
           WCMD_output_asis(spaceW);
       }




More information about the wine-cvs mailing list