[CMD] Wait for commands to exit when run with /C or /K. CORE-12402 #resolve
authorMark Jansen <mark.jansen@reactos.org>
Fri, 18 Nov 2016 19:53:40 +0000 (19:53 +0000)
committerMark Jansen <mark.jansen@reactos.org>
Fri, 18 Nov 2016 19:53:40 +0000 (19:53 +0000)
svn path=/trunk/; revision=73321

reactos/base/shell/cmd/cmd.c

index b6e09e3..ed162bf 100644 (file)
@@ -157,6 +157,7 @@ BOOL bExit = FALSE;       /* indicates EXIT was typed */
 BOOL bCanExit = TRUE;     /* indicates if this shell is exitable */
 BOOL bCtrlBreak = FALSE;  /* Ctrl-Break or Ctrl-C hit */
 BOOL bIgnoreEcho = FALSE; /* Set this to TRUE to prevent a newline, when executing a command */
+static BOOL bWaitForCommand = FALSE; /* When we are executing something passed on the commandline after /c or /k */
 INT  nErrorLevel = 0;     /* Errorlevel of last launched external program */
 CRITICAL_SECTION ChildProcessRunningLock;
 BOOL bUnicodeOutput = FALSE;
@@ -442,7 +443,7 @@ Execute(LPTSTR Full, LPTSTR First, LPTSTR Rest, PARSED_COMMAND *Cmd)
 
         if (prci.hProcess != NULL)
         {
-            if (bc != NULL || IsConsoleProcess(prci.hProcess))
+            if (bc != NULL || bWaitForCommand || IsConsoleProcess(prci.hProcess))
             {
                 /* when processing a batch file or starting console processes: execute synchronously */
                 EnterCriticalSection(&ChildProcessRunningLock);
@@ -1761,7 +1762,9 @@ Initialize()
     {
         /* Do the /C or /K command */
         GetCmdLineCommand(commandline, &ptr[2], AlwaysStrip);
+        bWaitForCommand = TRUE;
         nExitCode = ParseCommandLine(commandline);
+        bWaitForCommand = FALSE;
         if (option != _T('K'))
         {
             nErrorLevel = nExitCode;