=?UTF-8?Q?Bernhard=20=C3=9Cbelacker=20?=: cmd: Avoid having first parameter to start.exe ignored.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 03:49:13 CDT 2018


Module: wine
Branch: stable
Commit: b5815d148f36ca4ef1a2222ac254195c78107afa
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b5815d148f36ca4ef1a2222ac254195c78107afa

Author: Bernhard Übelacker <bernhardu at mailbox.org>
Date:   Fri Apr 27 17:57:42 2018 +0800

cmd: Avoid having first parameter to start.exe ignored.

Signed-off-by: Bernhard Übelacker <bernhardu at mailbox.org>
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit f95b85a856d06c93b316aca40a1481b4af6e814e)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 programs/cmd/builtins.c                  | 15 ++++++++-------
 programs/cmd/tests/test_builtins.cmd     |  4 ++++
 programs/cmd/tests/test_builtins.cmd.exp |  2 ++
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index ec66cd5..04b098e 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -4322,7 +4322,7 @@ void WCMD_start(WCHAR *args)
     int argno;
     int have_title;
     WCHAR file[MAX_PATH];
-    WCHAR *cmdline;
+    WCHAR *cmdline, *cmdline_params;
     STARTUPINFOW st;
     PROCESS_INFORMATION pi;
 
@@ -4331,6 +4331,7 @@ void WCMD_start(WCHAR *args)
     cmdline = heap_alloc( (strlenW(file) + strlenW(args) + 8) * sizeof(WCHAR) );
     strcpyW( cmdline, file );
     strcatW( cmdline, spaceW );
+    cmdline_params = cmdline + strlenW(cmdline);
 
     /* The start built-in has some special command-line parsing properties
      * which will be outlined here.
@@ -4382,17 +4383,17 @@ void WCMD_start(WCHAR *args)
             have_title = TRUE;
 
             /* Copy all of the cmdline processed */
-            memcpy(cmdline, args, sizeof(WCHAR) * (argN - args));
-            cmdline[argN - args] = '\0';
+            memcpy(cmdline_params, args, sizeof(WCHAR) * (argN - args));
+            cmdline_params[argN - args] = '\0';
 
             /* Add quoted title */
-            strcatW(cmdline, prefixQuote);
-            strcatW(cmdline, thisArg);
-            strcatW(cmdline, postfixQuote);
+            strcatW(cmdline_params, prefixQuote);
+            strcatW(cmdline_params, thisArg);
+            strcatW(cmdline_params, postfixQuote);
 
             /* Concatenate remaining command-line */
             thisArg = WCMD_parameter_with_delims(args, argno, &argN, TRUE, FALSE, startDelims);
-            strcatW(cmdline, argN + strlenW(thisArg));
+            strcatW(cmdline_params, argN + strlenW(thisArg));
 
             break;
         }
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index f684628..63ec3ca 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -2988,6 +2988,10 @@ path
 set path=%WINE_backup_path%
 set WINE_backup_path=
 
+echo ------------ Testing start /W ------------
+echo start /W failed to wait>foobar.txt
+start /W "" cmd /C "ping -n1 & echo start /W seems to really wait>foobar.txt"& type foobar.txt& del foobar.txt
+
 echo ------------ Testing combined CALLs/GOTOs ------------
 echo @echo off>foo.cmd
 echo goto :eof>>foot.cmd
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 4663c86..dcc9629 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -1574,6 +1574,8 @@ Correctly ignored trailing information
 PATH=original
 PATH=try2
 PATH=try3
+------------ Testing start /W ------------
+start /W seems to really wait
 ------------ Testing combined CALLs/GOTOs ------------
 world
 cheball




More information about the wine-cvs mailing list