int namespace_flags_to_string(unsigned long flags, char **ret) { _cleanup_free_ char *s = NULL; unsigned i; for (i = 0; namespace_flag_map[i].name; i++) { if ((flags & namespace_flag_map[i].flag) != namespace_flag_map[i].flag) continue; if (!strextend_with_separator(&s, " ", namespace_flag_map[i].name, NULL)) return -ENOMEM; } if (!s) { s = strdup(""); if (!s) return -ENOMEM; } *ret = TAKE_PTR(s); return 0; }
static void test_strextend_with_separator(void) { _cleanup_free_ char *str = NULL; assert_se(strextend_with_separator(&str, NULL, NULL)); assert_se(streq_ptr(str, "")); str = mfree(str); assert_se(strextend_with_separator(&str, "...", NULL)); assert_se(streq_ptr(str, "")); assert_se(strextend_with_separator(&str, "...", NULL)); assert_se(streq_ptr(str, "")); str = mfree(str); assert_se(strextend_with_separator(&str, "xyz", "a", "bb", "ccc", NULL)); assert_se(streq_ptr(str, "axyzbbxyzccc")); str = mfree(str); assert_se(strextend_with_separator(&str, ",", "start", "", "1", "234", NULL)); assert_se(streq_ptr(str, "start,,1,234")); assert_se(strextend_with_separator(&str, ";", "more", "5", "678", NULL)); assert_se(streq_ptr(str, "start,,1,234;more;5;678")); }