diff options
author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-08 18:04:01 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-08 18:04:01 +0200 |
commit | a42022c6505ba278dcc6b6ea8f790e37f8924cca (patch) | |
tree | dc669f3fa8850849251b2a1c80d9001f4b6883c8 /lib/src/rdsvc.c | |
parent | 6b788edfa40fd9c006f071ce764677e9dd2f9384 (diff) |
Cleanup: remove unnecessary allocations
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
Diffstat (limited to 'lib/src/rdsvc.c')
-rw-r--r-- | lib/src/rdsvc.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/lib/src/rdsvc.c b/lib/src/rdsvc.c index 8e9603d..29c9019 100644 --- a/lib/src/rdsvc.c +++ b/lib/src/rdsvc.c @@ -273,8 +273,6 @@ static int splitkv(const char *filename, size_t lineno, { char *key = line, *value = line; - *k = *v = NULL; - while (*value != ' ' && *value != '\0') { if (!isalpha(*value)) { fprintf(stderr, @@ -293,12 +291,6 @@ static int splitkv(const char *filename, size_t lineno, *(value++) = '\0'; - value = strdup(value); - if (value == NULL) { - fprintf(stderr, "%s: %zu: out of memory\n", filename, lineno); - return -1; - } - *k = key; *v = value; return 0; @@ -322,7 +314,7 @@ static const struct svc_param *find_param(const char *filename, size_t lineno, service_t *rdsvc(int dirfd, const char *filename) { - char *line = NULL, *key, *value = NULL; + char *line = NULL, *key, *value; const struct svc_param *p; const char *arg, *args[1]; service_t *svc = NULL; @@ -368,10 +360,12 @@ service_t *rdsvc(int dirfd, const char *filename) goto fail; p = find_param(filename, lineno, key); - if (p == NULL || p->handle(svc, value, filename, lineno) != 0) + if (p == NULL) goto fail; - free(line); + memmove(line, value, strlen(value) + 1); + if (p->handle(svc, line, filename, lineno)) + goto fail; } close(fd); @@ -379,7 +373,6 @@ service_t *rdsvc(int dirfd, const char *filename) fail_oom: fputs("out of memory\n", stderr); fail: - free(value); free(line); delsvc(svc); close(fd); |