This file is part of systemd.
Copyright 2012 Lennart Poettering
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
#include <stdio.h>
#include <stddef.h>
#include <string.h>
+#include <unistd.h>
#include "install.h"
#include "util.h"
#include "macro.h"
#include "hashmap.h"
#include "load-fragment.h"
+#include "strv.h"
static void test_unit_file_get_set(void) {
int r;
check_execcommand(c1,
"/RValue/slashes3", "argv0a", "r1", true);
+ /* ignore && honour_argv0 */
+ r = config_parse_exec("fake", 4, "section",
+ "LValue", 0, "@-/RValue///slashes4/// argv0b r1",
+ &c, NULL);
+ assert_se(r >= 0);
+ c1 = c1->command_next;
+ check_execcommand(c1,
+ "/RValue/slashes4", "argv0b", "r1", true);
+
+ /* ignore && ignore */
+ r = config_parse_exec("fake", 4, "section",
+ "LValue", 0, "--/RValue argv0 r1",
+ &c, NULL);
+ assert_se(r == 0);
+ assert_se(c1->command_next == NULL);
+
+ /* ignore && ignore */
+ r = config_parse_exec("fake", 4, "section",
+ "LValue", 0, "-@-/RValue argv0 r1",
+ &c, NULL);
+ assert_se(r == 0);
+ assert_se(c1->command_next == NULL);
+
/* semicolon */
r = config_parse_exec("fake", 5, "section",
"LValue", 0,
assert_se(c1->command_next == NULL);
+ /* escaped semicolon */
+ r = config_parse_exec("fake", 5, "section",
+ "LValue", 0,
+ "/usr/bin/find \\;",
+ &c, NULL);
+ assert_se(r >= 0);
+ c1 = c1->command_next;
+ check_execcommand(c1,
+ "/usr/bin/find", "/usr/bin/find", ";", false);
+
exec_command_free_list(c);
}
+#define env_file_1 \
+ "a\n" \
+ "b\\\n" \
+ "c\n" \
+ "d\\\n" \
+ "e\\\n" \
+ "f\n" \
+ "g\\ \n" \
+ "h\n" \
+ "i\\"
+
+#define env_file_2 \
+ "a\\\n"
+
+static void test_load_env_file_1(void) {
+ char _cleanup_strv_free_ **data = NULL;
+ int r;
+
+ char name[] = "/tmp/test-load-env-file.XXXXXX";
+ int _cleanup_close_ fd = mkstemp(name);
+ assert(fd >= 0);
+ assert_se(write(fd, env_file_1, sizeof(env_file_1)) == sizeof(env_file_1));
+
+ r = load_env_file(name, &data);
+ assert(r == 0);
+ assert(streq(data[0], "a"));
+ assert(streq(data[1], "bc"));
+ assert(streq(data[2], "def"));
+ assert(streq(data[3], "g\\"));
+ assert(streq(data[4], "h"));
+ assert(streq(data[5], "i\\"));
+ assert(data[6] == NULL);
+ unlink(name);
+}
+
+static void test_load_env_file_2(void) {
+ char _cleanup_strv_free_ **data = NULL;
+ int r;
+
+ char name[] = "/tmp/test-load-env-file.XXXXXX";
+ int _cleanup_close_ fd = mkstemp(name);
+ assert(fd >= 0);
+ assert_se(write(fd, env_file_2, sizeof(env_file_2)) == sizeof(env_file_2));
+
+ r = load_env_file(name, &data);
+ assert(r == 0);
+ assert(streq(data[0], "a"));
+ assert(data[1] == NULL);
+ unlink(name);
+}
+
+
int main(int argc, char *argv[]) {
test_unit_file_get_set();
test_config_parse_exec();
+ test_load_env_file_1();
+ test_load_env_file_2();
return 0;
}