From 6a310b07a1c5f73998fd0ff265d5701de04ab4f1 Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Tue, 15 Dec 2015 23:09:13 +0200 Subject: str: Add helper to extend dynamically argv list Add argv_insert function to dynamically insert string into argv list. Also added argv_free func to easy free dynamically allocated argv list. Signed-off-by: Vadim Kochan Signed-off-by: Tobias Klauser --- str.c | 20 ++++++++++++++++++++ str.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/str.c b/str.c index f4cb099..e4d8722 100644 --- a/str.c +++ b/str.c @@ -109,3 +109,23 @@ char *argv2str(int startind, int argc, char **argv) return str; } + +char **argv_insert(char **argv, size_t *count, const char *str) +{ + argv = xrealloc(argv, (*count + 2) * sizeof(char *)); + argv[*count] = str ? xstrdup(str) : xstrdup(""); + argv[*count + 1] = NULL; + + *count += 1; + return argv; +} + +void argv_free(char **argv) +{ + char **tmp = argv; + + for (; argv && *argv; argv++) + free(*argv); + + free(tmp); +} diff --git a/str.h b/str.h index 7d078da..3ffb2b9 100644 --- a/str.h +++ b/str.h @@ -9,5 +9,7 @@ extern int slprintf_nocheck(char *dst, size_t size, const char *fmt, ...); extern char *strtrim_right(char *p, char c); extern noinline void *xmemset(void *s, int c, size_t n); extern char *argv2str(int startind, int argc, char **argv); +extern char **argv_insert(char **argv, size_t *count, const char *str); +extern void argv_free(char **argv); #endif /* STR_H */ -- cgit v1.2.3-54-g00ecf