diff options
| author | Ron Yorston <rmy@pobox.com> | 2017-08-03 12:35:40 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2017-08-03 12:35:40 +0100 |
| commit | ee91cffef5d2dc60b62864f6a1ffb98eadd0a71a (patch) | |
| tree | 57d65ad41cfe376febd86d87ef03a878af4c0dee /shell | |
| parent | c3ca46e619744ccd6c597417cc8e373149608909 (diff) | |
| download | busybox-w32-ee91cffef5d2dc60b62864f6a1ffb98eadd0a71a.tar.gz busybox-w32-ee91cffef5d2dc60b62864f6a1ffb98eadd0a71a.tar.bz2 busybox-w32-ee91cffef5d2dc60b62864f6a1ffb98eadd0a71a.zip | |
ash: improvements to ctrl-c handling
Setting pending_int *before* hSIGINT improves the behaviour when
interrupting a shell script.
Echo '^C' to the console when handling an interrupt.
Increment shlvl in forkshell_init. On non-WIN32 platforms this was
done in forkchild.
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index 758187ccd..6a572cbc3 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -4308,8 +4308,8 @@ HANDLE hSIGINT; /* Ctrl-C is pressed */ | |||
| 4308 | static BOOL WINAPI ctrl_handler(DWORD dwCtrlType) | 4308 | static BOOL WINAPI ctrl_handler(DWORD dwCtrlType) |
| 4309 | { | 4309 | { |
| 4310 | if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) { | 4310 | if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) { |
| 4311 | SetEvent(hSIGINT); | ||
| 4312 | pending_int = 1; | 4311 | pending_int = 1; |
| 4312 | SetEvent(hSIGINT); | ||
| 4313 | return TRUE; | 4313 | return TRUE; |
| 4314 | } | 4314 | } |
| 4315 | return FALSE; | 4315 | return FALSE; |
| @@ -4379,6 +4379,8 @@ waitpid_child(int *status, int wait_flags) | |||
| 4379 | free(pidlist); | 4379 | free(pidlist); |
| 4380 | free(proclist); | 4380 | free(proclist); |
| 4381 | *status = 128 + SIGINT; /* terminated by a signal */ | 4381 | *status = 128 + SIGINT; /* terminated by a signal */ |
| 4382 | if (iflag) | ||
| 4383 | write(STDOUT_FILENO, "^C", 2); | ||
| 4382 | return pid; | 4384 | return pid; |
| 4383 | } | 4385 | } |
| 4384 | GetExitCodeProcess(proclist[idx], &win_status); | 4386 | GetExitCodeProcess(proclist[idx], &win_status); |
| @@ -15126,6 +15128,7 @@ forkshell_init(const char *idstr) | |||
| 15126 | 15128 | ||
| 15127 | reinitvar(); | 15129 | reinitvar(); |
| 15128 | 15130 | ||
| 15131 | shlvl++; | ||
| 15129 | forkshell_child(fs); | 15132 | forkshell_child(fs); |
| 15130 | } | 15133 | } |
| 15131 | 15134 | ||
