From: Vijay Kiran Kamuju infyquest@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55662 --- programs/cmd/builtins.c | 14 +++++++++++--- programs/cmd/tests/test_builtins.cmd | 5 +++++ programs/cmd/tests/test_builtins.cmd.exp | 4 ++++ 3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index f8ec0fbb6f4..dcf5fb02a7e 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -3176,7 +3176,7 @@ RETURN_CODE WCMD_setshow_env(WCHAR *s) }
/* If no parameter, or no '=' sign, return an error */ - if (!(*s) || ((p = wcschr (s, '=')) == NULL )) { + if (!(*s) || ((p = wcschr(s, '=')) == NULL )) { WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOARG)); return_code = ERROR_INVALID_FUNCTION; } @@ -3184,7 +3184,15 @@ RETURN_CODE WCMD_setshow_env(WCHAR *s) { /* Output the prompt */ *p++ = '\0'; - if (*p) WCMD_output_asis(p); + if (*p) { + p = WCMD_strtrim(p); + if (*p == L'"') { + WCHAR* last = wcsrchr(p+1, L'"'); + p++; + if (last) *last = L'\0'; + } + WCMD_output_asis(p); + }
/* Read the reply */ if (WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count) && count > 1) { @@ -3192,7 +3200,7 @@ RETURN_CODE WCMD_setshow_env(WCHAR *s) if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */ TRACE("set /p: Setting var '%s' to '%s'\n", wine_dbgstr_w(s), wine_dbgstr_w(string)); - SetEnvironmentVariableW(s, string); + if (*string) SetEnvironmentVariableW(s, string); } }
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index e8a2cadd515..4880470b8bc 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -853,6 +853,11 @@ del folder\sub1.bat rmdir "fol;der" rmdir folder PATH=%PATH_BACKUP% +set WINE_FOO=foo +echo bar| cmd /v:on /c "set /p WINE_FOO=prompt & echo X!WINE_FOO!X" +echo:| cmd /v:on /c "set /p WINE_FOO=prompt & echo Y!WINE_FOO!Y" +echo:| cmd /v:on /c "set /p WINE_FOO='prompt' & echo Y!WINE_FOO!Y" +echo:| cmd /v:on /c "set /p WINE_FOO="prompt" & echo Y!WINE_FOO!Y"
echo ------------ Testing 'choice' ------------
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index d61d81fbfe5..ab5a92d28c4 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -706,6 +706,10 @@ foo I'm here!@space@ I'm here!@space@ I'm here!@space@ +prompt XbarX +prompt YfooY +'prompt' YfooY +@todo_wine@promptYfooY ------------ Testing 'choice' ------------ Example message [A,B,C]?A@or_broken@choice unavailable 1@or_broken@9009