diff options
Diffstat (limited to 'cfgdir.c')
-rw-r--r-- | cfgdir.c | 34 |
1 files changed, 10 insertions, 24 deletions
@@ -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 |