Frédéric Delanoy : cmd: Fix handling of lines starting with echo. or echo:.
Module: wine Branch: master Commit: 71a237d478097f8a6e3ac537fe9bd09b5c7d78cd URL: http://source.winehq.org/git/wine.git/?a=commit;h=71a237d478097f8a6e3ac537fe... Author: Frédéric Delanoy <frederic.delanoy(a)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@ "/?" -(a)todo_wine@@pwd@>echo. +(a)pwd@>echo. @pwd@>echo .(a)space@ . -(a)todo_wine@@pwd@>echo.word +(a)pwd@>echo.word word @pwd@>echo .word(a)space@ .word -(a)todo_wine@@pwd@>echo: +(a)pwd@>echo: @pwd@>echo :@space@ : -(a)todo_wine@@pwd@>echo:word +(a)pwd@>echo:word word @pwd@>echo :word(a)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); }
participants (1)
-
Alexandre Julliard