diff options
author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-11 19:45:26 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-04-11 19:45:26 +0200 |
commit | 6642b2b2bf3d16e0632989c1e29c672882e0d283 (patch) | |
tree | f39581ab909a41fe07c005cbb81f2ec273d057ea /lib/src/rdsvc.c | |
parent | 71d98c150f6242fcf1b8a5845e46db56caad3885 (diff) |
Don't pre-allocate argument vector for command lines
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
Diffstat (limited to 'lib/src/rdsvc.c')
-rw-r--r-- | lib/src/rdsvc.c | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/lib/src/rdsvc.c b/lib/src/rdsvc.c index c8ba590..1a8cf7e 100644 --- a/lib/src/rdsvc.c +++ b/lib/src/rdsvc.c @@ -38,26 +38,6 @@ static int try_unescape(char *arg, rdline_t *rd) return 0; } -static char **try_split_argv(char *str, rdline_t *rd) -{ - char **argv = split_argv(str); - - if (argv == NULL) { - switch (errno) { - case EINVAL: - fprintf(stderr, "%s: %zu: malformed string constant\n", - rd->filename, rd->lineno); - break; - default: - fprintf(stderr, "%s: %zu: %s\n", - rd->filename, rd->lineno, strerror(errno)); - break; - } - } - - return argv; -} - static char *try_strdup(const char *str, rdline_t *rd) { char *out = strdup(str); @@ -96,11 +76,12 @@ static int svc_exec(service_t *svc, char *arg, rdline_t *rd) return -1; } - strcpy(e->buffer, arg); + strcpy(e->args, arg); - e->argv = try_split_argv(e->buffer, rd); - if (e->argv == NULL) { - free(e); + e->argc = pack_argv(e->args); + if (e->argc < 0) { + fprintf(stderr, "%s: %zu: malformed string constant\n", + rd->filename, rd->lineno); return -1; } |