aboutsummaryrefslogtreecommitdiff
path: root/client/acronc/handler_signal.c
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-26 23:11:28 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-26 23:11:28 -0700
commit8037d8a6000423a3ae59657cded4465fdd6fc74a (patch)
tree5e56ce6cfe953a1143482b439e9ee552541685b1 /client/acronc/handler_signal.c
parentc6948fd983fa1855b2dadba50aa50f576f54bdda (diff)
downloadacron-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.c21
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;
}