diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-09-11 21:50:16 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-09-11 21:58:22 -0400 |
commit | ac4c8d6da8b5ebc35f02c9c6cb7595be7b134a05 (patch) | |
tree | d666c2db49efa06b0cdc4511ab0276f2bc38ea68 /src/test | |
parent | 0b429ab7fca2aa139ffbeeac8bdcfbbd21cc1a60 (diff) |
Allow tabs in environment files
bash allows them, and so should we.
string_has_cc is changed to allow tabs, and if they are not wanted,
they must be now checked for explicitly. There are two other callers,
apart from the env file loaders, and one already checked anyway, and
the other is changed to check.
https://bugs.freedesktop.org/show_bug.cgi?id=68592
https://bugs.gentoo.org/show_bug.cgi?id=481554
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/test-fileio.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 76a43d9b69..1184e7e02f 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -142,6 +142,59 @@ static void test_parse_env_file(void) { unlink(p); } +static void test_parse_multiline_env_file(void) { + char t[] = "/tmp/test-fileio-in-XXXXXX", + p[] = "/tmp/test-fileio-out-XXXXXX"; + int fd, r; + FILE *f; + _cleanup_strv_free_ char **a = NULL, **b = NULL; + char **i; + + assert_se(mktemp(p)); + + fd = mkostemp(t, O_CLOEXEC); + assert_se(fd >= 0); + + f = fdopen(fd, "w"); + assert_se(f); + + fputs("one=BAR\\\n" + " VAR\\\n" + "\tGAR\n" + "#comment\n" + "two=\"bar\\\n" + " var\\\n" + "\tgar\"\n" + "#comment\n" + "tri=\"bar \\\n" + " var \\\n" + "\tgar \"\n", f); + + fflush(f); + fclose(f); + + r = load_env_file(t, NULL, &a); + assert_se(r >= 0); + + STRV_FOREACH(i, a) + log_info("Got: <%s>", *i); + + assert_se(streq(a[0], "one=BAR VAR\tGAR")); + assert_se(streq(a[1], "two=bar var\tgar")); + assert_se(streq(a[2], "tri=bar var \tgar ")); + assert_se(a[3] == NULL); + + r = write_env_file(p, a); + assert_se(r >= 0); + + r = load_env_file(p, NULL, &b); + assert_se(r >= 0); + + unlink(t); + unlink(p); +} + + static void test_executable_is_script(void) { char t[] = "/tmp/test-executable-XXXXXX"; int fd, r; @@ -178,6 +231,7 @@ static void test_executable_is_script(void) { int main(int argc, char *argv[]) { test_parse_env_file(); + test_parse_multiline_env_file(); test_executable_is_script(); return 0; } |