_cleanup_free_ char *p;
_cleanup_strv_free_ char **s;
char **t;
+ int r;
p = strv_join_quoted((char **)split);
assert_se(p);
assert_se(p);
assert_se(streq(p, quoted));
- s = strv_split_quoted(quoted);
+ r = strv_split_quoted(&s, quoted);
+ assert_se(r == 0);
assert_se(s);
STRV_FOREACH(t, s) {
assert_se(*t);
static void test_strv_unquote(const char *quoted, const char **list) {
_cleanup_strv_free_ char **s;
+ _cleanup_free_ char *j;
unsigned i = 0;
char **t;
+ int r;
- s = strv_split_quoted(quoted);
+ r = strv_split_quoted(&s, quoted);
+ assert_se(r == 0);
assert_se(s);
- strv_print(s);
+ j = strv_join(s, " | ");
+ assert(j);
+ puts(j);
STRV_FOREACH(t, s)
assert_se(streq(list[i++], *t));
assert_se(list[i] == NULL);
}
+static void test_invalid_unquote(const char *quoted) {
+ char **s = NULL;
+ int r;
+
+ r = strv_split_quoted(&s, quoted);
+ assert(s == NULL);
+ assert(r == -EINVAL);
+}
+
static void test_strv_split(void) {
char **s;
unsigned i = 0;
test_strv_unquote(" \"x'\" ", (const char*[]) { "x'", NULL });
test_strv_unquote("a '--b=c \"d e\"'", (const char*[]) { "a", "--b=c \"d e\"", NULL });
- test_strv_unquote("a --b='c \"d e\"'", (const char*[]) { "a", "--b='c", "\"d", "e\"'", NULL });
+ test_invalid_unquote("a --b='c \"d e\"'");
+ test_invalid_unquote("a --b='c \"d e\" '");
+ test_invalid_unquote("a --b='c \"d e\"garbage");
+ test_invalid_unquote("'");
+ test_invalid_unquote("\"");
+ test_invalid_unquote("'x'y");
test_strv_split();
test_strv_split_newlines();