[PATCH 3/5] [programs\cmd] for /f fails to launch quoted program plus args
Jason Edmeades
us at edmeades.me.uk
Sun Aug 5 17:15:28 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 f2a92c1a20..133ee53df2 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2081,7 +2081,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 d794805b71..b838485f45 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1707,9 +1707,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 9e77e98c25..ffdd316cb6 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -1206,6 +1206,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