[PATCH 3/5] [programs/cmd] RESEND: for /f fails to launch quoted program plus args
Jason Edmeades
us at edmeades.me.uk
Mon Aug 27 14:41:51 CDT 2018
Fixes bug#39906
for /f can run a program and parse its output. The program name can supply args and be quoted or not.
If quoted, wine fails to run the program because internally we were adding an extra pair of quotes. These
are not needed and can be removed.
Signed-off-by: Jason Edmeades <us at edmeades.me.uk>
---
programs/cmd/builtins.c | 2 +-
programs/cmd/tests/test_builtins.cmd | 4 +++-
programs/cmd/tests/test_builtins.cmd.exp | 2 ++
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 5026f9c1a5..cb4a7b901c 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2073,7 +2073,7 @@ static HANDLE WCMD_forf_getinputhandle(BOOL usebackq, WCHAR *itemstr, BOOL iscmd
static const WCHAR redirOutW[] = {'>','%','s','\0'};
static const WCHAR cmdW[] = {'C','M','D','\0'};
static const WCHAR cmdslashcW[] = {'C','M','D','.','E','X','E',' ',
- '/','C',' ','"','%','s','"','\0'};
+ '/','C',' ','%','s','\0'};
/* Remove leading and trailing character */
if ((iscmd && (itemstr[0] == '`' && usebackq)) ||
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 0738f2da6e..0e88ad14fa 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1724,9 +1724,11 @@ if "%CD%"=="" goto :SkipFORFcmdNT4
for /f %%i in ('echo.Passed1') do echo %%i
for /f "usebackq" %%i in (`echo.Passed2`) do echo %%i
for /f usebackq %%i in (`echo.Passed3`) do echo %%i
+for /f "usebackq" %%i in (`"c:\windows\system32\cmd.exe" /C echo Passed4`) do echo %%i
+for /f "usebackq" %%i in (`""c:\windows\system32\cmd.exe" /C echo Passed5"`) do echo %%i
goto :ContinueFORF
:SkipFORFcmdNT4
-for /l %%i in (1,1,3) do echo Missing functionality - Broken%%i
+for /l %%i in (1,1,5) do echo Missing functionality - Broken%%i
:ContinueFORF
rem FIXME: Rest not testable right now in wine: not implemented and would need
rem preliminary grep-like program implementation (e.g. like findstr or fc) even
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 7ec83d7acb..1f2b5dd8de 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -1209,6 +1209,8 @@ c
Passed1 at or_broken@Missing functionality - Broken1
Passed2 at or_broken@Missing functionality - Broken2
Passed3 at or_broken@Missing functionality - Broken3
+Passed4 at or_broken@Missing functionality - Broken4
+Passed5 at or_broken@Missing functionality - Broken5
------ eol option
and at or_broken@Broken NT4 functionality1
Line at or_broken@Broken NT4 functionality2
--
2.17.1
More information about the wine-devel
mailing list