Module: wine Branch: master Commit: 7e4715149a96c19233117944b1dcf5db5126c6f9 URL: https://gitlab.winehq.org/wine/wine/-/commit/7e4715149a96c19233117944b1dcf5d...
Author: Dmitry Sokolov mr.dmitry.sokolov@gmail.com Date: Thu Aug 24 23:42:43 2023 +0300
cmd: Fixed var substring in 'enableDelayedExpansion' mode.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55402
---
programs/cmd/tests/test_builtins.cmd | 11 +++++++++++ programs/cmd/tests/test_builtins.cmd.exp | 5 +++++ programs/cmd/wcmdmain.c | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index 0cb05041fa9..28b935ad521 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -1275,6 +1275,17 @@ set x=C:\Program Files (x86) if ""=="" set y=%x%\dummy echo %y%
+echo --- Testing if + var subst in delayed expansion mode +setlocal enableDelayedExpansion +for %%i in (abc 10.0 11.0) do ( + set result=%%i + echo [DEBUG] checking {!result!} + if "!result:~0,3!"=="10." ( + echo SDKVER=!result! + ) +) +endlocal + echo ------------ Testing for ------------ echo --- plain FOR for %%i in (A B C) do echo %%i diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 16f9d647b8a..57e72a77387 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -927,6 +927,11 @@ x@space@ A ------------ Testing if/set ------------ C:\Program Files (x86)\dummy +--- Testing if + var subst in delayed expansion mode +[DEBUG] checking {abc} +[DEBUG] checking {10.0} +SDKVER=10.0 +[DEBUG] checking {11.0} ------------ Testing for ------------ --- plain FOR A diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 528e4a83800..d00c6e07566 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -596,7 +596,7 @@ static WCHAR *WCMD_expand_envvar(WCHAR *start, WCHAR startchar) /* If there's complex substitution, just need %var% for now to get the expanded data to play with */ if (colonpos) { - *colonpos = startchar; + *colonpos = '%'; savedchar = *(colonpos+1); *(colonpos+1) = 0x00; }