util: rework strappenda(), and rename it strjoina()

After all it is now much more like strjoin() than strappend(). At the
same time, add support for NULL sentinels, even if they are normally not
necessary.
This commit is contained in:
Lennart Poettering
2015-02-03 02:05:59 +01:00
parent 44de0efc6e
commit 63c372cb9d
75 changed files with 248 additions and 237 deletions
+4 -4
View File
@@ -59,12 +59,12 @@ static void test_conf_files_list(bool use_root) {
search_2 = "/dir2";
} else {
root_dir = NULL;
search_1 = strappenda(tmp_dir, "/dir1");
search_2 = strappenda(tmp_dir, "/dir2");
search_1 = strjoina(tmp_dir, "/dir1");
search_2 = strjoina(tmp_dir, "/dir2");
}
expect_a = strappenda(tmp_dir, "/dir1/a.conf");
expect_b = strappenda(tmp_dir, "/dir2/b.conf");
expect_a = strjoina(tmp_dir, "/dir1/a.conf");
expect_b = strjoina(tmp_dir, "/dir2/b.conf");
assert_se(conf_files_list(&found_files, ".conf", root_dir, search_1, search_2, NULL) == 0);
strv_print(found_files);
+6 -6
View File
@@ -90,15 +90,15 @@ static void test_copy_tree(void) {
rm_rf_dangerous(original_dir, false, true, false);
STRV_FOREACH(p, files) {
char *f = strappenda(original_dir, *p);
char *f = strjoina(original_dir, *p);
assert_se(mkdir_parents(f, 0755) >= 0);
assert_se(write_string_file(f, "file") == 0);
}
STRV_FOREACH_PAIR(link, p, links) {
char *f = strappenda(original_dir, *p);
char *l = strappenda(original_dir, *link);
char *f = strjoina(original_dir, *p);
char *l = strjoina(original_dir, *link);
assert_se(mkdir_parents(l, 0755) >= 0);
assert_se(symlink(f, l) == 0);
@@ -109,7 +109,7 @@ static void test_copy_tree(void) {
STRV_FOREACH(p, files) {
_cleanup_free_ char *buf = NULL;
size_t sz = 0;
char *f = strappenda(copy_dir, *p);
char *f = strjoina(copy_dir, *p);
assert_se(access(f, F_OK) == 0);
assert_se(read_full_file(f, &buf, &sz) == 0);
@@ -118,8 +118,8 @@ static void test_copy_tree(void) {
STRV_FOREACH_PAIR(link, p, links) {
_cleanup_free_ char *target = NULL;
char *f = strappenda(original_dir, *p);
char *l = strappenda(copy_dir, *link);
char *f = strjoina(original_dir, *p);
char *l = strjoina(copy_dir, *link);
assert_se(readlink_and_canonicalize(l, &target) == 0);
assert_se(path_equal(f, target));
+2 -2
View File
@@ -42,8 +42,8 @@ static void test_tmpdir(const char *id, const char *A, const char *B) {
assert_se((x.st_mode & 01777) == 0700);
assert_se((y.st_mode & 01777) == 0700);
c = strappenda(a, "/tmp");
d = strappenda(b, "/tmp");
c = strjoina(a, "/tmp");
d = strjoina(b, "/tmp");
assert_se(stat(c, &x) >= 0);
assert_se(stat(d, &y) >= 0);
+2 -2
View File
@@ -33,9 +33,9 @@ static void test_paths(SystemdRunningAs running_as, bool personal) {
char *exists, *not;
assert_se(mkdtemp(template));
exists = strappenda(template, "/exists");
exists = strjoina(template, "/exists");
assert_se(mkdir(exists, 0755) == 0);
not = strappenda(template, "/not");
not = strjoina(template, "/not");
assert_se(lookup_paths_init(&lp, running_as, personal, NULL, exists, not, not) == 0);
+2 -2
View File
@@ -47,7 +47,7 @@ static int setup_test(Manager **m) {
assert_se(manager_startup(tmp, NULL, NULL) >= 0);
STRV_FOREACH(test_path, tests_path) {
rm_rf_dangerous(strappenda("/tmp/test-path_", *test_path), false, true, false);
rm_rf_dangerous(strjoina("/tmp/test-path_", *test_path), false, true, false);
}
*m = tmp;
@@ -201,7 +201,7 @@ static void test_path_directorynotempty(Manager *m) {
assert_se(access(test_path, F_OK) < 0);
assert_se(mkdir_p(test_path, 0755) >= 0);
assert_se(touch(strappenda(test_path, "test_file")) >= 0);
assert_se(touch(strjoina(test_path, "test_file")) >= 0);
check_stop_unlink(m, unit, test_path, NULL);
}
+1 -1
View File
@@ -30,7 +30,7 @@
int main(int argc, char** argv) {
const char *p = argv[1] ?: "/tmp";
char *pattern = strappenda(p, "/systemd-test-XXXXXX");
char *pattern = strjoina(p, "/systemd-test-XXXXXX");
_cleanup_close_ int fd, fd2;
_cleanup_free_ char *cmd, *cmd2;
+24 -12
View File
@@ -1072,17 +1072,29 @@ static void test_strshorten(void) {
assert_se(strlen(strshorten(s, 0)) == 0);
}
static void test_strappenda(void) {
static void test_strjoina(void) {
char *actual;
actual = strappenda("", "foo", "bar");
actual = strjoina("", "foo", "bar");
assert_se(streq(actual, "foobar"));
actual = strappenda("foo", "bar", "baz");
actual = strjoina("foo", "bar", "baz");
assert_se(streq(actual, "foobarbaz"));
actual = strappenda("foo", "", "bar", "baz");
actual = strjoina("foo", "", "bar", "baz");
assert_se(streq(actual, "foobarbaz"));
actual = strjoina("foo");
assert_se(streq(actual, "foo"));
actual = strjoina(NULL);
assert_se(streq(actual, ""));
actual = strjoina(NULL, "foo");
assert_se(streq(actual, ""));
actual = strjoina("foo", NULL, "bar");
assert_se(streq(actual, "foo"));
}
static void test_is_symlink(void) {
@@ -1231,13 +1243,13 @@ static void test_execute_directory(void) {
assert_se(mkdtemp(template_lo));
assert_se(mkdtemp(template_hi));
name = strappenda(template_lo, "/script");
name2 = strappenda(template_hi, "/script2");
name3 = strappenda(template_lo, "/useless");
overridden = strappenda(template_lo, "/overridden");
override = strappenda(template_hi, "/overridden");
masked = strappenda(template_lo, "/masked");
mask = strappenda(template_hi, "/masked");
name = strjoina(template_lo, "/script");
name2 = strjoina(template_hi, "/script2");
name3 = strjoina(template_lo, "/useless");
overridden = strjoina(template_lo, "/overridden");
override = strjoina(template_hi, "/overridden");
masked = strjoina(template_lo, "/masked");
mask = strjoina(template_hi, "/masked");
assert_se(write_string_file(name, "#!/bin/sh\necho 'Executing '$0\ntouch $(dirname $0)/it_works") == 0);
assert_se(write_string_file(name2, "#!/bin/sh\necho 'Executing '$0\ntouch $(dirname $0)/it_works2") == 0);
@@ -1562,7 +1574,7 @@ int main(int argc, char *argv[]) {
test_read_one_char();
test_ignore_signals();
test_strshorten();
test_strappenda();
test_strjoina();
test_is_symlink();
test_pid_is_unwaited();
test_pid_is_alive();