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