diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util.c | 21 | ||||
-rw-r--r-- | src/shared/util.h | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index a54e879953..fc6f668726 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -7137,3 +7137,24 @@ int unquote_many_words(const char **p, ...) { return c; } + +int free_and_strdup(char **p, const char *s) { + char *t; + + assert(p); + + /* Replaces a string pointer with an strdup()ed new string, + * possibly freeing the old one. */ + + if (s) { + t = strdup(s); + if (!t) + return -ENOMEM; + } else + t = NULL; + + free(*p); + *p = t; + + return 0; +} diff --git a/src/shared/util.h b/src/shared/util.h index 8cd47b8294..cd947dbbef 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -978,3 +978,5 @@ int is_symlink(const char *path); int unquote_first_word(const char **p, char **ret); int unquote_many_words(const char **p, ...) _sentinel_; + +int free_and_strdup(char **p, const char *s); |