From 24c90b7700e18d0668799f8f343bc854a42dea20 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Wed, 10 Oct 2018 11:28:46 +0200 Subject: Configuration parser cleanup - Do a getline() & process in rdline instead of doing a read per character and feeding it through a state machine. - Move splitkv to rdcfg.c, the only place where it is used Signed-off-by: David Oberhollenzer --- lib/util/rdsvc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'lib/util') diff --git a/lib/util/rdsvc.c b/lib/util/rdsvc.c index 747d753..ca60731 100644 --- a/lib/util/rdsvc.c +++ b/lib/util/rdsvc.c @@ -266,8 +266,6 @@ service_t *rdsvc(int dirfd, const char *filename, int flags) argc = 0; } - rdline_init(&rd, fd, filename, argc, args); - nlen = (arg != NULL) ? (size_t)(arg - filename) : strlen(filename); svc = calloc(1, sizeof(*svc) + nlen + 1); @@ -282,14 +280,17 @@ service_t *rdsvc(int dirfd, const char *filename, int flags) memcpy(svc->name, filename, nlen); - if (rdcfg(svc, &rd, svc_params, ARRAY_SIZE(svc_params), flags)) - goto fail; + rdline_init(&rd, fd, filename, argc, args); + + if (rdcfg(svc, &rd, svc_params, ARRAY_SIZE(svc_params), flags)) { + delsvc(svc); + svc = NULL; + } - close(fd); + rdline_cleanup(&rd); return svc; fail_oom: fputs("out of memory\n", stderr); -fail: delsvc(svc); close(fd); return NULL; -- cgit v1.2.3