chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use more _cleanup_ macro
[elogind.git]
/
src
/
shared
/
strv.c
diff --git
a/src/shared/strv.c
b/src/shared/strv.c
index 13deba7be7780a7978d52d22b5e998a427af15f5..1ef0b26a25b0d6eb091507e7c0281e53be484398 100644
(file)
--- a/
src/shared/strv.c
+++ b/
src/shared/strv.c
@@
-378,9
+378,18
@@
int strv_push(char ***l, char *value) {
return 0;
}
return 0;
}
+int strv_consume(char ***l, char *value) {
+ int r;
+
+ r = strv_push(l, value);
+ if (r < 0)
+ free(value);
+
+ return r;
+}
+
int strv_extend(char ***l, const char *value) {
char *v;
int strv_extend(char ***l, const char *value) {
char *v;
- int r;
if (!value)
return 0;
if (!value)
return 0;
@@
-389,11
+398,7
@@
int strv_extend(char ***l, const char *value) {
if (!v)
return -ENOMEM;
if (!v)
return -ENOMEM;
- r = strv_push(l, v);
- if (r < 0)
- free(v);
-
- return r;
+ return strv_consume(l, v);
}
char **strv_uniq(char **l) {
}
char **strv_uniq(char **l) {
@@
-522,3
+527,18
@@
void strv_print(char **l) {
STRV_FOREACH(s, l)
puts(*s);
}
STRV_FOREACH(s, l)
puts(*s);
}
+
+int strv_extendf(char ***l, const char *format, ...) {
+ va_list ap;
+ char *x;
+ int r;
+
+ va_start(ap, format);
+ r = vasprintf(&x, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return -ENOMEM;
+
+ return strv_consume(l, x);
+}