From 9daf6a0e6b461c6c2a16f810f722b9d10504bf90 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 10 Jun 2020 13:28:41 +0200 Subject: Introduce a common task buffer and convert cfgdir and rcon to use it --- cfgdir.c | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) (limited to 'cfgdir.c') diff --git a/cfgdir.c b/cfgdir.c index 9fa0c78..8793486 100644 --- a/cfgdir.c +++ b/cfgdir.c @@ -98,7 +98,7 @@ struct cfg_key_value_map scfg_key_map[] = { static void scfg_parse(struct cfg *cfg, struct server *scfg) { - char *pos = &scfg->buf[0]; + char *pos = &scfg->tbuf.buf[0]; if (!config_parse_header(cfg, "server", &pos)) return; @@ -219,8 +219,6 @@ scfg_parse(struct cfg *cfg, struct server *scfg) break; } } - - //printf("Cfg:\n%s\n\n", pos); } static void @@ -228,27 +226,16 @@ scfg_read_cb(struct cfg *cfg, struct uring_task *task, int res) { struct server *scfg = container_of(task, struct server, task); - printf("Asked to parse server cfg %s (bytes %i)\n", scfg->name, res); - if (res < 0) { - perrordie("read"); - } else if (res > 0) { - scfg->len += res; - if (scfg->len + 1 >= sizeof(scfg->buf)) { - fprintf(stderr, "Server config too large\n"); - server_delete(cfg, scfg); - return; - } - - uring_read(cfg, &scfg->task, scfg->buf + scfg->len, sizeof(scfg->buf) - scfg->len, scfg->len, scfg_read_cb); - return; - } else { - /* EOF */ - scfg->buf[scfg->len] = '\0'; - uring_task_close_fd(cfg, &scfg->task); - scfg_parse(cfg, scfg); - server_commit(cfg, scfg); + fprintf(stderr, "%s: error reading config file for %s: %s\n", + __func__, scfg->name, strerror(-res)); + server_delete(cfg, scfg); } + + printf("Asked to parse server cfg %s (bytes %i)\n", scfg->name, res); + uring_task_close_fd(cfg, &scfg->task); + scfg_parse(cfg, scfg); + server_commit(cfg, scfg); } static void @@ -265,8 +252,7 @@ scfg_open_cb(struct cfg *cfg, struct uring_task *task, int res) printf("Asked to read server cfg %s (fd %i)\n", scfg->name, res); uring_task_set_fd(&scfg->task, res); - scfg->len = 0; - uring_read(cfg, &scfg->task, scfg->buf, sizeof(scfg->buf), 0, scfg_read_cb); + uring_tbuf_read_until_eof(cfg, &scfg->task, scfg_read_cb); } static bool -- cgit v1.2.3