diff --git a/base/shell/cmd/cmd.c b/base/shell/cmd/cmd.c index d8414e0043d..25ddae0c6f0 100644 --- a/base/shell/cmd/cmd.c +++ b/base/shell/cmd/cmd.c @@ -151,7 +151,7 @@ typedef NTSTATUS (WINAPI *NtReadVirtualMemoryProc)(HANDLE, PVOID, PVOID, ULONG, BOOL bExit = FALSE; /* indicates EXIT was typed */ BOOL bCanExit = TRUE; /* indicates if this shell is exitable */ -volatile BOOL bCtrlBreak = FALSE; /* Ctrl-Break or Ctrl-C hit */ +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 */ @@ -1448,6 +1448,9 @@ ProcessInput(VOID) while (!bCanExit || !bExit) { + /* Reset the Ctrl-Break / Ctrl-C state */ + bCtrlBreak = FALSE; + Cmd = ParseCommand(NULL); if (!Cmd) continue; @@ -1500,7 +1503,7 @@ BOOL WINAPI BreakHandler(DWORD dwCtrlType) /* FIXME: Handle batch files */ - //ConOutPrintf(_T("^C")); + // ConOutPrintf(_T("^C")); return TRUE; } diff --git a/base/shell/cmd/cmd.h b/base/shell/cmd/cmd.h index 285916c74c7..6a2f680a68f 100644 --- a/base/shell/cmd/cmd.h +++ b/base/shell/cmd/cmd.h @@ -47,7 +47,7 @@ extern LPTSTR lpOriginalEnvironment; extern WORD wColor; extern WORD wDefColor; -extern volatile BOOL bCtrlBreak; +extern BOOL bCtrlBreak; extern BOOL bIgnoreEcho; extern BOOL bExit; extern BOOL bDisableBatchEcho; diff --git a/base/shell/cmd/misc.c b/base/shell/cmd/misc.c index d7d7af31337..a6d2f545595 100644 --- a/base/shell/cmd/misc.c +++ b/base/shell/cmd/misc.c @@ -129,7 +129,7 @@ VOID GetPathCase( TCHAR * Path, TCHAR * OutPath) * Check if Ctrl-Break was pressed during the last calls */ -BOOL CheckCtrlBreak (INT mode) +BOOL CheckCtrlBreak(INT mode) { static BOOL bLeaveAll = FALSE; /* leave all batch files */ TCHAR options[4]; /* Yes, No, All */ @@ -138,10 +138,11 @@ BOOL CheckCtrlBreak (INT mode) switch (mode) { case BREAK_OUTOFBATCH: - bLeaveAll = 0; + bLeaveAll = FALSE; return FALSE; case BREAK_BATCHFILE: + { if (bLeaveAll) return TRUE; @@ -160,11 +161,15 @@ BOOL CheckCtrlBreak (INT mode) ConOutChar(_T('\n')); if (c == options[1]) - return bCtrlBreak = FALSE; /* ignore */ + { + bCtrlBreak = FALSE; /* ignore */ + return FALSE; + } /* leave all batch files */ bLeaveAll = ((c == options[2]) || (c == _T('\3'))); break; + } case BREAK_INPUT: if (!bCtrlBreak) @@ -173,7 +178,6 @@ BOOL CheckCtrlBreak (INT mode) } /* state processed */ - bCtrlBreak = FALSE; return TRUE; }