diff options
author | Mattias Andrée <maandree@kth.se> | 2024-05-05 10:24:40 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2024-05-05 10:24:40 +0200 |
commit | 3dfd6c11ed5599ab8baf4a6114f4ccb34150de6e (patch) | |
tree | b7717583b99f29028c85c3423cf43b104dfa8943 /libexec_put_argumentsn.c | |
download | libexec-3dfd6c11ed5599ab8baf4a6114f4ccb34150de6e.tar.gz libexec-3dfd6c11ed5599ab8baf4a6114f4ccb34150de6e.tar.bz2 libexec-3dfd6c11ed5599ab8baf4a6114f4ccb34150de6e.tar.xz |
First commit
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libexec_put_argumentsn.c')
-rw-r--r-- | libexec_put_argumentsn.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/libexec_put_argumentsn.c b/libexec_put_argumentsn.c new file mode 100644 index 0000000..9d09ec0 --- /dev/null +++ b/libexec_put_argumentsn.c @@ -0,0 +1,45 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" +#ifndef TEST + + +int +libexec_put_argumentsn(struct libexec_command *cmd, const char *const *args, size_t nargs) +{ + size_t i; + void *new; + + if (!cmd) { + errno = EINVAL; + return -1; + } + + new = realloc(cmd->arguments, (cmd->narguments + nargs + 1) * sizeof(*cmd->arguments)); + if (!new) + return -1; + cmd->arguments = new; + + for (i = 0; i < nargs; i++) { + cmd->arguments[cmd->narguments + i] = strdup(args[i]); + if (!cmd->arguments[cmd->narguments + i]) { + while (i) + free(cmd->arguments[cmd->narguments + --i]); + if (!cmd->narguments) { + free(cmd->arguments); + cmd->arguments = NULL; + } + return -1; + } + } + + cmd->arguments[cmd->narguments + nargs] = NULL; + cmd->narguments += nargs; + + return 0; + +} + + +#else +LIBEXEC_CONST__ int main(void) {return 0;} /* TODO test */ +#endif |