basic: Add strv_extend_assignment()
This commit is contained in:
@@ -789,6 +789,22 @@ rollback:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
int strv_extend_assignment(char ***l, const char *lhs, const char *rhs) {
|
||||
char *j;
|
||||
|
||||
assert(l);
|
||||
assert(lhs);
|
||||
|
||||
if (!rhs) /* value is optional, in which case we suppress the field */
|
||||
return 0;
|
||||
|
||||
j = strjoin(lhs, "=", rhs);
|
||||
if (!j)
|
||||
return -ENOMEM;
|
||||
|
||||
return strv_consume(l, j);
|
||||
}
|
||||
|
||||
int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
|
||||
bool b = false;
|
||||
int r;
|
||||
|
||||
@@ -241,6 +241,8 @@ char** strv_skip(char **l, size_t n);
|
||||
|
||||
int strv_extend_n(char ***l, const char *value, size_t n);
|
||||
|
||||
int strv_extend_assignment(char ***l, const char *lhs, const char *rhs);
|
||||
|
||||
int fputstrv(FILE *f, char * const *l, const char *separator, bool *space);
|
||||
|
||||
#define strv_free_and_replace(a, b) \
|
||||
|
||||
@@ -942,4 +942,16 @@ TEST(strv_fnmatch) {
|
||||
assert_se(pos == 1);
|
||||
}
|
||||
|
||||
TEST(strv_extend_join) {
|
||||
_cleanup_strv_free_ char **v = NULL;
|
||||
|
||||
assert_se(strv_extend_assignment(&v, "MESSAGE", "ABC") >= 0);
|
||||
assert_se(strv_extend_assignment(&v, "ABC", "QER") >= 0);
|
||||
assert_se(strv_extend_assignment(&v, "MISSING", NULL) >= 0);
|
||||
|
||||
assert_se(strv_length(v) == 2);
|
||||
assert_se(streq(v[0], "MESSAGE=ABC"));
|
||||
assert_se(streq(v[1], "ABC=QER"));
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
|
||||
Reference in New Issue
Block a user