diff options
| author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-10-10 11:28:46 +0200 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-10-10 16:45:11 +0200 | 
| commit | 24c90b7700e18d0668799f8f343bc854a42dea20 (patch) | |
| tree | 224d9b5e81a46e27f354c6975fc3fa4cd1f1fb79 /lib/util | |
| parent | 7b647eefef00afb6104e84fae2a2fbf0481d4364 (diff) | |
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 <david.oberhollenzer@tele2.at>
Diffstat (limited to 'lib/util')
| -rw-r--r-- | lib/util/rdsvc.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| 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; | 
