diff options
author | Kenny Levinsen <kl@kl.wtf> | 2020-08-03 01:26:31 +0200 |
---|---|---|
committer | Kenny Levinsen <kl@kl.wtf> | 2020-08-03 02:13:47 +0200 |
commit | c35b2d2d8848957c1761fe107352fd989c3915f4 (patch) | |
tree | ba88bacd5c546a48ae4c67a8b76dd6ae39fc6905 /seatd | |
parent | d68c5feaee9b294d071c0825f5600e316c728708 (diff) | |
download | seatd-c35b2d2d8848957c1761fe107352fd989c3915f4.tar.xz |
server: Stack-allocate the server
Diffstat (limited to 'seatd')
-rw-r--r-- | seatd/seatd.c | 14 | ||||
-rw-r--r-- | seatd/server.c | 19 |
2 files changed, 14 insertions, 19 deletions
diff --git a/seatd/seatd.c b/seatd/seatd.c index 0c83253..d0ff7e1 100644 --- a/seatd/seatd.c +++ b/seatd/seatd.c @@ -29,8 +29,8 @@ int main(int argc, char *argv[]) { } libseat_log_init(level); - struct server *server = server_create(); - if (server == NULL) { + struct server server = {0}; + if (server_init(&server) == -1) { log_errorf("server_create failed: %s", strerror(errno)); return 1; } @@ -39,22 +39,22 @@ int main(int argc, char *argv[]) { path = "/run/seatd.sock"; } - if (server_listen(server, path) == -1) { + if (server_listen(&server, path) == -1) { log_errorf("server_listen failed: %s", strerror(errno)); - server_destroy(server); + server_finish(&server); return 1; } log_info("seatd started"); - while (server->running) { - if (poller_poll(&server->poller) == -1) { + while (server.running) { + if (poller_poll(&server.poller) == -1) { log_errorf("poller failed: %s", strerror(errno)); return 1; } } - server_destroy(server); + server_finish(&server); unlink(path); return 0; } diff --git a/seatd/server.c b/seatd/server.c index 017aa39..354d6a5 100644 --- a/seatd/server.c +++ b/seatd/server.c @@ -26,11 +26,7 @@ static int server_handle_vt_acq(int signal, void *data); static int server_handle_vt_rel(int signal, void *data); static int server_handle_kill(int signal, void *data); -struct server *server_create(void) { - struct server *server = calloc(1, sizeof(struct server)); - if (server == NULL) { - return NULL; - } +int server_init(struct server *server) { poller_init(&server->poller); list_init(&server->seats); @@ -39,8 +35,8 @@ struct server *server_create(void) { poller_add_signal(&server->poller, SIGUSR2, server_handle_vt_acq, server) == NULL || poller_add_signal(&server->poller, SIGINT, server_handle_kill, server) == NULL || poller_add_signal(&server->poller, SIGTERM, server_handle_kill, server) == NULL) { - server_destroy(server); - return NULL; + server_finish(server); + return -1; } char *vtenv = getenv("SEATD_VTBOUND"); @@ -48,16 +44,16 @@ struct server *server_create(void) { // TODO: create more seats: struct seat *seat = seat_create("seat0", vtenv == NULL || strcmp(vtenv, "1") == 0); if (seat == NULL) { - server_destroy(server); - return NULL; + server_finish(server); + return -1; } list_add(&server->seats, seat); server->running = true; - return server; + return 0; } -void server_destroy(struct server *server) { +void server_finish(struct server *server) { assert(server); for (size_t idx = 0; idx < server->seats.length; idx++) { struct seat *seat = server->seats.items[idx]; @@ -65,7 +61,6 @@ void server_destroy(struct server *server) { } list_free(&server->seats); poller_finish(&server->poller); - free(server); } struct seat *server_get_seat(struct server *server, const char *seat_name) { |