aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils/bc.c')
-rw-r--r--miscutils/bc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 28bc40c8b..31485ae9c 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -203,6 +203,9 @@
203 203
204#include "libbb.h" 204#include "libbb.h"
205#include "common_bufsiz.h" 205#include "common_bufsiz.h"
206#if ENABLE_PLATFORM_MINGW32
207# include "BB_VER.h"
208#endif
206 209
207#if !ENABLE_BC && !ENABLE_FEATURE_DC_BIG 210#if !ENABLE_BC && !ENABLE_FEATURE_DC_BIG
208# include "dc.c" 211# include "dc.c"
@@ -7466,6 +7469,17 @@ static unsigned xc_vm_envLen(const char *var)
7466 return len; 7469 return len;
7467} 7470}
7468 7471
7472#if ENABLE_PLATFORM_MINGW32 && ENABLE_FEATURE_BC_INTERACTIVE
7473static BOOL WINAPI ctrl_handler(DWORD dwCtrlType)
7474{
7475 if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) {
7476 bb_got_signal = SIGINT;
7477 return TRUE;
7478 }
7479 return FALSE;
7480}
7481#endif
7482
7469static int xc_vm_init(const char *env_len) 7483static int xc_vm_init(const char *env_len)
7470{ 7484{
7471 G.prog.len = xc_vm_envLen(env_len); 7485 G.prog.len = xc_vm_envLen(env_len);
@@ -7491,7 +7505,11 @@ static int xc_vm_init(const char *env_len)
7491 // from stdin is not interrupted by ^C either, 7505 // from stdin is not interrupted by ^C either,
7492 // it restarts, thus fgetc() does not return on ^C. 7506 // it restarts, thus fgetc() does not return on ^C.
7493 // (This problem manifests only if line editing is disabled) 7507 // (This problem manifests only if line editing is disabled)
7508# if !ENABLE_PLATFORM_MINGW32
7494 signal_SA_RESTART_empty_mask(SIGINT, record_signo); 7509 signal_SA_RESTART_empty_mask(SIGINT, record_signo);
7510# else
7511 SetConsoleCtrlHandler(ctrl_handler, TRUE);
7512# endif
7495 7513
7496 // Without SA_RESTART, this exhibits a bug: 7514 // Without SA_RESTART, this exhibits a bug:
7497 // "while (1) print 1" and try ^C-ing it. 7515 // "while (1) print 1" and try ^C-ing it.