diff options
author | Ruiyu Ni <ruiyu.ni@intel.com> | 2017-11-28 17:06:32 +0800 |
---|---|---|
committer | Ruiyu Ni <ruiyu.ni@intel.com> | 2017-11-29 09:07:26 +0800 |
commit | 0c83ac57f5c236a70766673ada65fff6b78596d6 (patch) | |
tree | 9a5c8e0305c27396a29e68186d44ea1acffc67e1 /ShellPkg/Application | |
parent | df076c7bab24ac9e68cce8b7874941dbeea3fce1 (diff) | |
download | edk2-0c83ac57f5c236a70766673ada65fff6b78596d6.tar.gz edk2-0c83ac57f5c236a70766673ada65fff6b78596d6.tar.bz2 edk2-0c83ac57f5c236a70766673ada65fff6b78596d6.zip |
ShellPkg: Fix the bug that handling Ctrl-C improperly
Current implementation resets the CTRL-C event early when printing
the shell prompt, when user types "<CTRL-C>ls<ENTER>", "ls" command
is terminated immediately when starts.
It's not an expected behavior from users' perspective.
Correct way is to reset the CTRL-C event just before running the
command, which is a bit later than current point.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Diffstat (limited to 'ShellPkg/Application')
-rw-r--r-- | ShellPkg/Application/Shell/Shell.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/ShellPkg/Application/Shell/Shell.c b/ShellPkg/Application/Shell/Shell.c index 2adc99240c..577e17311b 100644 --- a/ShellPkg/Application/Shell/Shell.c +++ b/ShellPkg/Application/Shell/Shell.c @@ -621,11 +621,6 @@ UefiMain ( ShellInfoObject.ConsoleInfo->RowCounter = 0;
//
- // Reset the CTRL-C event (yes we ignore the return values)
- //
- Status = gBS->CheckEvent (ShellInfoObject.NewEfiShellProtocol->ExecutionBreak);
-
- //
// Display Prompt
//
Status = DoShellPrompt();
@@ -1346,9 +1341,14 @@ DoShellPrompt ( // Null terminate the string and parse it
//
if (!EFI_ERROR (Status)) {
+ //
+ // Reset the CTRL-C event just before running the command (yes we ignore the return values)
+ //
+ Status = gBS->CheckEvent (ShellInfoObject.NewEfiShellProtocol->ExecutionBreak);
+
CmdLine[BufferSize / sizeof (CHAR16)] = CHAR_NULL;
Status = RunCommand(CmdLine);
- }
+ }
//
// Done with this command
|