Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55662
Tests are not provided as its interactive.
-- v9: cmd: Do not set enviroment variable when no input is provided by set /p command.
From: Vijay Kiran Kamuju infyquest@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55662 --- programs/cmd/builtins.c | 9 ++++++--- programs/cmd/tests/test_builtins.cmd | 5 +++++ programs/cmd/tests/test_builtins.cmd.exp | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index bd0d94f00e8..45004be5966 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -3200,7 +3200,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; } @@ -3208,7 +3208,10 @@ RETURN_CODE WCMD_setshow_env(WCHAR *s) { /* Output the prompt */ *p++ = '\0'; - if (*p) WCMD_output_asis(p); + if (*p) { + if (wcschr(p, '"')) WCMD_strip_quotes(p); + WCMD_output_asis(p); + }
/* Read the reply */ if (WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count) && count > 1) { @@ -3216,7 +3219,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 b43848575fc..12f8d6e6935 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -780,6 +780,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 4b162af9a8e..09b2eb36f7b 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -657,6 +657,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' ------------ @todo_wine@Example message [A,B,C]?A@or_broken@choice unavailable 1@or_broken@9009