aboutsummaryrefslogtreecommitdiff
path: root/seatd/server.c
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2020-08-03 01:26:31 +0200
committerKenny Levinsen <kl@kl.wtf>2020-08-03 02:13:47 +0200
commitc35b2d2d8848957c1761fe107352fd989c3915f4 (patch)
treeba88bacd5c546a48ae4c67a8b76dd6ae39fc6905 /seatd/server.c
parentd68c5feaee9b294d071c0825f5600e316c728708 (diff)
server: Stack-allocate the server
Diffstat (limited to 'seatd/server.c')
-rw-r--r--seatd/server.c19
1 files changed, 7 insertions, 12 deletions
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) {