aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-26 17:42:18 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-26 17:42:18 -0700
commit04c2dcffc0fa862af56eb5ff6fb57fd672745c3e (patch)
treee920bcafb4e4976551b1426fb068bac3ed6bb11a
parent7099a86ca74fa637f26af38674f80fb8efd5f6fa (diff)
downloadacron-04c2dcffc0fa862af56eb5ff6fb57fd672745c3e.tar
acron-04c2dcffc0fa862af56eb5ff6fb57fd672745c3e.tar.gz
acron-04c2dcffc0fa862af56eb5ff6fb57fd672745c3e.tar.bz2
acron-04c2dcffc0fa862af56eb5ff6fb57fd672745c3e.zip
fix(acronc): code cleanup
Signed-off-by: Trumeet <yuuta@yuuta.moe>
-rw-r--r--client/acronc/handler.h22
-rw-r--r--client/acronc/handler_signal.c19
-rw-r--r--client/acronc/main.c2
3 files changed, 7 insertions, 36 deletions
diff --git a/client/acronc/handler.h b/client/acronc/handler.h
index 1a2ccfe..5764387 100644
--- a/client/acronc/handler.h
+++ b/client/acronc/handler.h
@@ -8,29 +8,9 @@
#include <uv.h>
#include <libac.h>
-enum exit_reason {
- /* Exit due to a signal. Socket is working. */
- EXIT_SIGNAL,
- /* Exit due to an EOF from stdin. Socket is working. */
- EXIT_STDIN_EOF,
- /* Exit due to an EOF from socket. Socket is closed. */
- EXIT_SOCKET_EOF,
- /* Exit due to a socket failure. Socket is closed. */
- EXIT_FAILURE_SOCKET,
- /* Exit due to a failure. Socket is working. */
- EXIT_FAILURE
-};
-
-struct uv_obj {
- void *obj;
- bool running;
-};
-
extern uv_loop_t *loop;
-extern void (*on_exit)(enum exit_reason reason);
-
-int h_signal(void);
+int h_signal(void (*on_quit)(void));
int h_stdin(int (*on_input)(ac_request_t *req),
void (*on_close)(void));
diff --git a/client/acronc/handler_signal.c b/client/acronc/handler_signal.c
index 1d0ba7e..d5df9d4 100644
--- a/client/acronc/handler_signal.c
+++ b/client/acronc/handler_signal.c
@@ -6,35 +6,26 @@
#include "log.h"
static uv_signal_t sigint;
-static struct uv_obj obj_sigint = {
- .obj = &sigint,
- .running = false
-};
static uv_signal_t sigterm;
-static struct uv_obj obj_sigterm = {
- .obj = &sigterm,
- .running = false
-};
static void on_signal(uv_signal_t *handle, int signum) {
LOGDV("on_signal(handle = %p): %d",
handle,
signum);
+ void (*on_quit)(void) = handle->data;
uv_signal_stop(&sigint);
- obj_sigint.running = false;
uv_signal_stop(&sigterm);
- obj_sigterm.running = false;
- on_exit(EXIT_SIGNAL);
+ on_quit();
}
-int h_signal(void) {
+int h_signal(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;
- obj_sigint.running = true;
if ((r = uv_signal_init(loop, &sigterm))) return r;
+ sigterm.data = on_quit;
if ((r = uv_signal_start(&sigterm, on_signal, SIGTERM))) return r;
- obj_sigterm.running = true;
return 0;
}
diff --git a/client/acronc/main.c b/client/acronc/main.c
index 6e18ed2..6a473ed 100644
--- a/client/acronc/main.c
+++ b/client/acronc/main.c
@@ -89,7 +89,7 @@ int main(int argc, const char **argv) {
if ((r = ac_init(&config))) errx(r, "Cannot initialize Acron library.");
if ((r = uv_loop_init(loop))) goto uviniterr;
- if ((r = h_signal())) goto uviniterr;
+ if ((r = h_signal(on_stdin_closed))) goto uviniterr;
if ((r = a_dns(params.host, params.port, on_resolv))) goto uviniterr;
if ((r = uv_run(loop, UV_RUN_DEFAULT))) {