diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-07-26 23:11:28 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-26 23:11:28 -0700 |
commit | 8037d8a6000423a3ae59657cded4465fdd6fc74a (patch) | |
tree | 5e56ce6cfe953a1143482b439e9ee552541685b1 /client/acronc/handler_signal.c | |
parent | c6948fd983fa1855b2dadba50aa50f576f54bdda (diff) | |
download | acron-8037d8a6000423a3ae59657cded4465fdd6fc74a.tar acron-8037d8a6000423a3ae59657cded4465fdd6fc74a.tar.gz acron-8037d8a6000423a3ae59657cded4465fdd6fc74a.tar.bz2 acron-8037d8a6000423a3ae59657cded4465fdd6fc74a.zip |
feat(acronc): prettify cli experience
1. Make SIGINT interrupt the current operation by forcing stdin to listen again (because the spec currently does not specify how to send the final response, so acronc will wait forever in case of invalid commands)
2. Prettify prompt and output.
Signed-off-by: Trumeet <yuuta@yuuta.moe>
Diffstat (limited to 'client/acronc/handler_signal.c')
-rw-r--r-- | client/acronc/handler_signal.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/client/acronc/handler_signal.c b/client/acronc/handler_signal.c index d5df9d4..7dafe95 100644 --- a/client/acronc/handler_signal.c +++ b/client/acronc/handler_signal.c @@ -8,8 +8,16 @@ static uv_signal_t sigint; static uv_signal_t sigterm; -static void on_signal(uv_signal_t *handle, int signum) { - LOGDV("on_signal(handle = %p): %d", +static void on_sigint(uv_signal_t *handle, int signum) { + LOGDV("on_int(handle = %p): %d", + handle, + signum); + void (*on_int)(void) = handle->data; + on_int(); +} + +static void on_term(uv_signal_t *handle, int signum) { + LOGDV("on_term(handle = %p): %d", handle, signum); void (*on_quit)(void) = handle->data; @@ -18,14 +26,15 @@ static void on_signal(uv_signal_t *handle, int signum) { on_quit(); } -int h_signal(void (*on_quit)(void)) { +int h_signal(void (*on_int)(void), + void (*on_quit)(void)) { int r; if ((r = uv_signal_init(loop, &sigint))) return r; - sigint.data = on_quit; - if ((r = uv_signal_start(&sigint, on_signal, SIGINT))) return r; + sigint.data = on_int; + if ((r = uv_signal_start(&sigint, on_sigint, SIGINT))) return r; if ((r = uv_signal_init(loop, &sigterm))) return r; sigterm.data = on_quit; - if ((r = uv_signal_start(&sigterm, on_signal, SIGTERM))) return r; + if ((r = uv_signal_start(&sigterm, on_term, SIGTERM))) return r; return 0; } |