_cleanup_free_ char *p;
const char *n;
- p = strappend(*s, "=");
+ p = strjoin(*s, "=");
if (!p)
return log_oom();
if (!names)
return log_oom();
- e = strappend("LISTEN_FDNAMES=", names);
+ e = strjoin("LISTEN_FDNAMES=", names);
if (!e)
return log_oom();
if (ioctl(old_fd, BTRFS_IOC_INO_LOOKUP, &ino_args) < 0)
return -errno;
- /* The kernel returns an empty name if the
- * subvolume is in the top-level directory,
- * and otherwise appends a slash, so that we
- * can just concatenate easily here, without
- * adding a slash. */
- c = strappend(ino_args.name, p);
+ c = path_join(ino_args.name, p);
if (!c)
return -ENOMEM;
}
if (need_prefix)
- return strappend("_", p);
+ return strjoin("_", p);
return strdup(p);
}
t = strv_env_get_n(env, word+2, e-word-2, flags);
- k = strappend(r, t);
+ k = strjoin(r, t);
if (!k)
return NULL;
else if (!t && state == DEFAULT_VALUE)
t = v = replace_env_n(test_value, e-test_value, env, flags);
- k = strappend(r, t);
+ k = strjoin(r, t);
if (!k)
return NULL;
t = strv_env_get_n(env, word+1, e-word-1, flags);
- k = strappend(r, t);
+ k = strjoin(r, t);
if (!k)
return NULL;
assert(flags & REPLACE_ENV_ALLOW_BRACELESS);
t = strv_env_get_n(env, word+1, e-word-1, flags);
- return strappend(r, t);
+ return strjoin(r, t);
} else
return strnappend(r, word, e-word);
}
char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) {
char *x;
- x = strappend(field, value);
+ x = strjoin(field, value);
if (x)
iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
return x;
_cleanup_free_ char *x = NULL;
int r;
- x = strappend(field, value);
+ x = strjoin(field, value);
if (!x)
return log_oom();
if (!e)
return -ENOMEM;
- g = strappend("sd-", e);
+ g = strjoin("sd-", e);
if (!g)
return -ENOMEM;
return r;
}
-char *strappend(const char *s, const char *suffix) {
- return strnappend(s, suffix, strlen_ptr(suffix));
-}
-
char *strjoin_real(const char *x, ...) {
va_list ap;
size_t l;
#define _FOREACH_WORD(word, length, s, separator, flags, state) \
for ((state) = (s), (word) = split(&(state), &(length), (separator), (flags)); (word); (word) = split(&(state), &(length), (separator), (flags)))
-char *strappend(const char *s, const char *suffix);
char *strnappend(const char *s, const char *suffix, size_t length);
char *strjoin_real(const char *x, ...) _sentinel_;
STRV_FOREACH(s, b) {
char *v;
- v = strappend(*s, suffix);
+ v = strjoin(*s, suffix);
if (!v)
return -ENOMEM;
if (!e)
return NULL;
- return strappend("/org/freedesktop/systemd1/unit/", e);
+ return strjoin("/org/freedesktop/systemd1/unit/", e);
}
int unit_name_from_dbus_path(const char *path, char **name) {
}
int unit_name_path_unescape(const char *f, char **ret) {
- char *s;
+ _cleanup_free_ char *s = NULL;
int r;
assert(f);
if (!s)
return -ENOMEM;
} else {
- char *w;
+ _cleanup_free_ char *w = NULL;
r = unit_name_unescape(f, &w);
if (r < 0)
return r;
/* Don't accept trailing or leading slashes */
- if (startswith(w, "/") || endswith(w, "/")) {
- free(w);
+ if (startswith(w, "/") || endswith(w, "/"))
return -EINVAL;
- }
/* Prefix a slash again */
- s = strappend("/", w);
- free(w);
+ s = strjoin("/", w);
if (!s)
return -ENOMEM;
- if (!path_is_normalized(s)) {
- free(s);
+ if (!path_is_normalized(s))
return -EINVAL;
- }
}
if (ret)
- *ret = s;
- else
- free(s);
+ *ret = TAKE_PTR(s);
return 0;
}
if (r < 0)
return r;
- s = strappend(p, suffix);
+ s = strjoin(p, suffix);
if (!s)
return -ENOMEM;
return -EINVAL;
if (streq(slice, SPECIAL_ROOT_SLICE))
- subslice = strappend(name, ".slice");
+ subslice = strjoin(name, ".slice");
else {
char *e;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Rule file name '%s' is not valid, refusing.", x + 1);
- fn = strappend("/proc/sys/fs/binfmt_misc/", x+1);
+ fn = path_join("/proc/sys/fs/binfmt_misc", x+1);
if (!fn)
return log_oom();
}
if (home) {
- x = strappend("HOME=", home);
+ x = strjoin("HOME=", home);
if (!x)
return -ENOMEM;
}
if (username) {
- x = strappend("LOGNAME=", username);
+ x = strjoin("LOGNAME=", username);
if (!x)
return -ENOMEM;
our_env[n_env++] = x;
- x = strappend("USER=", username);
+ x = strjoin("USER=", username);
if (!x)
return -ENOMEM;
our_env[n_env++] = x;
}
if (shell) {
- x = strappend("SHELL=", shell);
+ x = strjoin("SHELL=", shell);
if (!x)
return -ENOMEM;
if (!term)
term = default_term_for_tty(tty_path);
- x = strappend("TERM=", term);
+ x = strjoin("TERM=", term);
if (!x)
return -ENOMEM;
our_env[n_env++] = x;
fd_inc_rcvbuf(fd, NOTIFY_RCVBUF_SIZE);
- m->notify_socket = strappend(m->prefix[EXEC_DIRECTORY_RUNTIME], "/systemd/notify");
+ m->notify_socket = path_join(m->prefix[EXEC_DIRECTORY_RUNTIME], "systemd/notify");
if (!m->notify_socket)
return log_oom();
if (!options)
options = TAKE_PTR(controller);
- where = strappend("/sys/fs/cgroup/", options);
+ where = path_join("/sys/fs/cgroup", options);
if (!where)
return log_oom();
if (r < 0)
return r;
- t = strappend("REMOTE_ADDR=", addr);
+ t = strjoin("REMOTE_ADDR=", addr);
if (!t)
return -ENOMEM;
our_env[n_env++] = t;
if (r < 0)
return r;
- t->stamp_path = strappend("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
+ t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
} else {
const char *e;
_cleanup_free_ char *fn_compressed = NULL, *tmp_compressed = NULL;
_cleanup_close_ int fd_compressed = -1;
- fn_compressed = strappend(fn, COMPRESSED_EXT);
+ fn_compressed = strjoin(fn, COMPRESSED_EXT);
if (!fn_compressed) {
log_oom();
goto uncompressed;
continue;
if (!d->name) {
- d->name = strappend("luks-", d->uuid);
+ d->name = strjoin("luks-", d->uuid);
if (!d->name)
return log_oom();
}
- device = strappend("UUID=", d->uuid);
+ device = strjoin("UUID=", d->uuid);
if (!device)
return log_oom();
if (!p)
return log_oom();
- f = strappend(SYSTEM_DATA_UNIT_PATH "/", *u);
+ f = path_join(SYSTEM_DATA_UNIT_PATH, *u);
if (!f)
return log_oom();
if (device) {
char *ret;
- ret = strappend("/dev/mapper/", id);
+ ret = path_join("/dev/mapper", id);
if (!ret)
return log_oom();
assert(c);
if (!isempty(c->data[PROP_CHASSIS]))
- return strappend("computer-", c->data[PROP_CHASSIS]);
+ return strjoin("computer-", c->data[PROP_CHASSIS]);
chassis = fallback_chassis();
if (chassis)
- return strappend("computer-", chassis);
+ return strjoin("computer-", chassis);
return strdup("computer");
}
if (!cc)
return -ENOMEM;
- hdr = strappend("If-None-Match: ", cc);
+ hdr = strjoin("If-None-Match: ", cc);
if (!hdr)
return -ENOMEM;
if (!comm)
return log_oom();
- t = strappend("_COMM=", comm);
+ t = strjoin("_COMM=", comm);
if (!t)
return log_oom();
/* Append _EXE only if the interpreter is not a link.
Otherwise, it might be outdated often. */
if (lstat(interpreter, &st) == 0 && !S_ISLNK(st.st_mode)) {
- t2 = strappend("_EXE=", interpreter);
+ t2 = strjoin("_EXE=", interpreter);
if (!t2)
return log_oom();
}
} else {
- t = strappend("_EXE=", p);
+ t = strjoin("_EXE=", p);
if (!t)
return log_oom();
}
char *b;
if (sd_device_get_devname(d, &g) >= 0) {
- b = strappend("_UDEV_DEVNODE=", g);
+ b = strjoin("_UDEV_DEVNODE=", g);
if (b) {
iovec[n++] = IOVEC_MAKE_STRING(b);
z++;
}
if (sd_device_get_sysname(d, &g) >= 0) {
- b = strappend("_UDEV_SYSNAME=", g);
+ b = strjoin("_UDEV_SYSNAME=", g);
if (b) {
iovec[n++] = IOVEC_MAKE_STRING(b);
z++;
if (j >= N_IOVEC_UDEV_FIELDS)
break;
- b = strappend("_UDEV_DEVLINK=", g);
+ b = strjoin("_UDEV_DEVLINK=", g);
if (b) {
iovec[n++] = IOVEC_MAKE_STRING(b);
z++;
goto finish;
if (identifier) {
- syslog_identifier = strappend("SYSLOG_IDENTIFIER=", identifier);
+ syslog_identifier = strjoin("SYSLOG_IDENTIFIER=", identifier);
if (syslog_identifier)
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
}
if (pid) {
- syslog_pid = strappend("SYSLOG_PID=", pid);
+ syslog_pid = strjoin("SYSLOG_PID=", pid);
if (syslog_pid)
iovec[n++] = IOVEC_MAKE_STRING(syslog_pid);
}
if (!t)
return;
- x = strappend("_HOSTNAME=", t);
+ x = strjoin("_HOSTNAME=", t);
if (!x)
return;
}
if (s->identifier) {
- syslog_identifier = strappend("SYSLOG_IDENTIFIER=", s->identifier);
+ syslog_identifier = strjoin("SYSLOG_IDENTIFIER=", s->identifier);
if (syslog_identifier)
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
}
iovec[n++] = IOVEC_MAKE_STRING(c);
}
- message = strappend("MESSAGE=", p);
+ message = strjoin("MESSAGE=", p);
if (message)
iovec[n++] = IOVEC_MAKE_STRING(message);
assert(fname);
if (!stream->state_file) {
- stream->state_file = strappend("/run/systemd/journal/streams/", fname);
+ stream->state_file = path_join("/run/systemd/journal/streams", fname);
if (!stream->state_file)
return log_oom();
}
#include "journal-file.h"
#include "journal-internal.h"
#include "macro.h"
+#include "path-util.h"
#include "string-util.h"
int main(int argc, char *argv[]) {
assert_se(mkdtemp(dn));
(void) chattr_path(dn, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
- fn = strappend(dn, "/test.journal");
+ fn = path_join(dn, "test.journal");
r = journal_file_open(-1, fn, O_CREAT|O_RDWR, 0644, false, 0, false, NULL, NULL, NULL, NULL, &new_journal);
assert_se(r >= 0);
if (!name)
return 0;
- n = strappend("System.Error.", name);
+ n = strjoin("System.Error.", name);
if (!n)
return -ENOMEM;
if (!filename_is_valid(seat))
return -EINVAL;
- p = strappend("/run/systemd/seats/", seat);
+ p = path_join("/run/systemd/seats", seat);
} else {
_cleanup_free_ char *buf = NULL;
if (r < 0)
return r;
- p = strappend("/run/systemd/seats/", buf);
+ p = path_join("/run/systemd/seats", buf);
}
-
if (!p)
return -ENOMEM;
if (!session_id_valid(session))
return -EINVAL;
- p = strappend("/run/systemd/sessions/", session);
+ p = path_join("/run/systemd/sessions", session);
} else {
_cleanup_free_ char *buf = NULL;
if (r < 0)
return r;
- p = strappend("/run/systemd/sessions/", buf);
+ p = path_join("/run/systemd/sessions", buf);
}
if (!p)
if (r < 0)
return r;
- fn = strappend(c, "/user-dirs.dirs");
+ fn = path_join(c, "user-dirs.dirs");
if (!fn)
return -ENOMEM;
if (r < 0)
return r;
- cc = strappend(h, p+5);
+ cc = path_join(h, p+5);
if (!cc)
return -ENOMEM;
if (r < 0)
return r;
- cc = strappend(h, "/Desktop");
+ cc = path_join(h, "Desktop");
if (!cc)
return -ENOMEM;
_cleanup_free_ char *s = NULL;
char **u;
- s = strappend("KEYMAP=", c->vc_keymap);
+ s = strjoin("KEYMAP=", c->vc_keymap);
if (!s)
return -ENOMEM;
_cleanup_free_ char *s = NULL;
char **u;
- s = strappend("KEYMAP_TOGGLE=", c->vc_keymap_toggle);
+ s = strjoin("KEYMAP_TOGGLE=", c->vc_keymap_toggle);
if (!s)
return -ENOMEM;
if (cunescape(dent->d_name, UNESCAPE_RELAX, &unescaped_devname) < 0)
return -ENOMEM;
- n = strappend("/dev/", unescaped_devname);
+ n = path_join("/dev", unescaped_devname);
if (!n)
return -ENOMEM;
if (r < 0)
return r;
- t = strappend(p, "/uevent");
+ t = path_join(p, "uevent");
if (!t)
return -ENOMEM;
#include "logind-inhibit.h"
#include "mkdir.h"
#include "parse-util.h"
+#include "path-util.h"
#include "string-table.h"
#include "string-util.h"
#include "tmpfile-util.h"
if (!i)
return NULL;
- i->state_file = strappend("/run/systemd/inhibit/", id);
+ i->state_file = path_join("/run/systemd/inhibit", id);
if (!i->state_file)
return mfree(i);
if (!t)
return NULL;
- return strappend("/org/freedesktop/login1/seat/", t);
+ return strjoin("/org/freedesktop/login1/seat/", t);
}
int seat_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
#include "logind-session-dbus.h"
#include "mkdir.h"
#include "parse-util.h"
+#include "path-util.h"
#include "stdio-util.h"
#include "string-util.h"
#include "terminal-util.h"
.manager = m,
};
- s->state_file = strappend("/run/systemd/seats/", id);
+ s->state_file = path_join("/run/systemd/seats", id);
if (!s->state_file)
return -ENOMEM;
if (!t)
return NULL;
- return strappend("/org/freedesktop/login1/session/", t);
+ return strjoin("/org/freedesktop/login1/session/", t);
}
int session_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
.tty_validity = _TTY_VALIDITY_INVALID,
};
- s->state_file = strappend("/run/systemd/sessions/", id);
+ s->state_file = path_join("/run/systemd/sessions", id);
if (!s->state_file)
return -ENOMEM;
assert(atime);
if (!path_is_absolute(tty)) {
- p = strappend("/dev/", tty);
+ p = path_join("/dev", tty);
if (!p)
return -ENOMEM;
if (++(*i_dev) < n_dev) {
_cleanup_free_ char *p = NULL;
- p = strappend(prefix, lookahead < n_dev ? special_glyph(SPECIAL_GLYPH_TREE_VERTICAL) : " ");
+ p = strjoin(prefix, lookahead < n_dev ? special_glyph(SPECIAL_GLYPH_TREE_VERTICAL) : " ");
if (!p)
return -ENOMEM;
if (!e)
return NULL;
- return strappend("/org/freedesktop/machine1/image/", e);
+ return strjoin("/org/freedesktop/machine1/image/", e);
}
int image_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
if (!e)
return NULL;
- return strappend("/org/freedesktop/machine1/machine/", e);
+ return strjoin("/org/freedesktop/machine1/machine/", e);
}
int machine_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
#include "machine.h"
#include "mkdir.h"
#include "parse-util.h"
+#include "path-util.h"
#include "process-util.h"
#include "serialize.h"
#include "special.h"
goto fail;
if (class != MACHINE_HOST) {
- m->state_file = strappend("/run/systemd/machines/", m->name);
+ m->state_file = path_join("/run/systemd/machines", m->name);
if (!m->state_file)
goto fail;
}
our_env[i++] = (char*) "READY=1";
if (arg_status) {
- status = strappend("STATUS=", arg_status);
+ status = strjoin("STATUS=", arg_status);
if (!status)
return log_oom();
if (r < 0)
return log_error_errno(r, "Failed to add netlink interface index: %m");
- n = strappend("mv-", *i);
+ n = strjoin("mv-", *i);
if (!n)
return log_oom();
if (r < 0)
return log_error_errno(r, "Failed to add netlink interface index: %m");
- n = strappend("iv-", *i);
+ n = strjoin("iv-", *i);
if (!n)
return log_oom();
assert(lvalue);
assert(rvalue);
- j = strappend("vz-", rvalue);
+ j = strjoin("vz-", rvalue);
if (!ifname_valid(j)) {
log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid network zone name, ignoring: %s", rvalue);
return 0;
case ARG_NETWORK_ZONE: {
char *j;
- j = strappend("vz-", optarg);
+ j = strjoin("vz-", optarg);
if (!j)
return log_oom();
}
if (route_only)
- str = strappend("~", domain);
+ str = strjoin("~", domain);
else
str = strdup(domain);
if (!str)
if (!soa->soa.mname)
return -ENOMEM;
- soa->soa.rname = strappend("root.", name);
+ soa->soa.rname = strjoin("root.", name);
if (!soa->soa.rname)
return -ENOMEM;
return -EBADMSG;
/* Replace the label we stripped off with an asterisk */
- wc = strappend("*.", name);
+ wc = strjoin("*.", name);
if (!wc)
return -ENOMEM;
continue;
rm:
- p = strappend("/run/systemd/resolve/netif/", de->d_name);
+ p = path_join("/run/systemd/resolve/netif", de->d_name);
if (!p) {
log_oom();
return;
special = special_glyph(more ? SPECIAL_GLYPH_TREE_VERTICAL : SPECIAL_GLYPH_TREE_SPACE);
- pp = strappend(prefix, special);
+ pp = strjoin(prefix, special);
if (!pp)
return -ENOMEM;
if (!is_ex_prop && (flags & (EXEC_COMMAND_NO_ENV_EXPAND|EXEC_COMMAND_FULLY_PRIVILEGED|EXEC_COMMAND_NO_SETUID|EXEC_COMMAND_AMBIENT_MAGIC))) {
/* Upgrade the ExecXYZ= property to ExecXYZEx= for convenience */
is_ex_prop = true;
- upgraded_name = strappend(field, "Ex");
+ upgraded_name = strjoin(field, "Ex");
if (!upgraded_name)
return log_oom();
}
return log_oom();
}
- name_with_equal = strappend(name, "=");
+ name_with_equal = strjoin(name, "=");
if (!name_with_equal)
return log_oom();
printf("%s%s%s\n", prefix, special_glyph(SPECIAL_GLYPH_TREE_BRANCH), cg_unescape(basename(last)));
if (!p1) {
- p1 = strappend(prefix, special_glyph(SPECIAL_GLYPH_TREE_VERTICAL));
+ p1 = strjoin(prefix, special_glyph(SPECIAL_GLYPH_TREE_VERTICAL));
if (!p1)
return -ENOMEM;
}
printf("%s%s%s\n", prefix, special_glyph(SPECIAL_GLYPH_TREE_RIGHT), cg_unescape(basename(last)));
if (!p2) {
- p2 = strappend(prefix, " ");
+ p2 = strjoin(prefix, " ");
if (!p2)
return -ENOMEM;
}
has_vendor = true;
}
- dropin = strappend(path, ".d");
+ dropin = strjoin(path, ".d");
if (!dropin)
return -ENOMEM;
fn = strjoina(image->name, ".nspawn");
- FOREACH_STRING(s, "/etc/systemd/nspawn/", "/run/systemd/nspawn/") {
- l[i] = strappend(s, fn);
+ FOREACH_STRING(s, "/etc/systemd/nspawn", "/run/systemd/nspawn") {
+ l[i] = path_join(s, fn);
if (!l[i])
return NULL;
if (errno != ENOENT)
return -errno;
- raw = strappend(name, ".raw");
+ raw = strjoin(name, ".raw");
if (!raw)
return -ENOMEM;
if (!e)
return -ENXIO;
- j = strappend(e, suffix);
+ j = strjoin(e, suffix);
if (!j)
return -ENOMEM;
e = getenv("XDG_CONFIG_HOME");
if (e)
- j = strappend(e, suffix);
+ j = strjoin(e, suffix);
else {
_cleanup_free_ char *home = NULL;
e = getenv("XDG_DATA_HOME");
if (e)
- j = strappend(e, suffix);
+ j = strjoin(e, suffix);
else {
_cleanup_free_ char *home = NULL;
prefix = strjoina(e, "/systemd");
}
- x = strappend(prefix, "/generator");
+ x = path_join(prefix, "generator");
if (!x)
return -ENOMEM;
- y = strappend(prefix, "/generator.early");
+ y = path_join(prefix, "generator.early");
if (!y)
return -ENOMEM;
- z = strappend(prefix, "/generator.late");
+ z = path_join(prefix, "generator.late");
if (!z)
return -ENOMEM;
if (path_startswith(optarg, "/proc/sys"))
p = strdup(optarg);
else
- p = strappend("/proc/sys/", optarg);
+ p = path_join("/proc/sys", optarg);
if (!p)
return log_oom();
}
if (!isempty(arg_root)) {
- q = strappend("--root=", arg_root);
+ q = strjoin("--root=", arg_root);
if (!q)
return log_oom();
if (description) {
char *d;
- d = strappend(s->has_lsb ? "LSB: " : "SYSV: ", description);
+ d = strjoin(s->has_lsb ? "LSB: " : "SYSV: ", description);
if (!d)
return log_oom();
while (files) {
_cleanup_free_ char *path;
- assert_se(path = strappend(tmp_dir, files));
+ assert_se(path = path_join(tmp_dir, files));
(void) mkdir_parents(path, 0755);
assert_se(write_string_file(path, "foobar", WRITE_STRING_FILE_CREATE) >= 0);
STRV_FOREACH(p, files) {
_cleanup_free_ char *f;
- assert_se(f = strappend(original_dir, *p));
+ assert_se(f = path_join(original_dir, *p));
assert_se(mkdir_parents(f, 0755) >= 0);
assert_se(write_string_file(f, "file", WRITE_STRING_FILE_CREATE) == 0);
STRV_FOREACH_PAIR(link, p, links) {
_cleanup_free_ char *f, *l;
- assert_se(f = strappend(original_dir, *p));
- assert_se(l = strappend(original_dir, *link));
+ assert_se(f = path_join(original_dir, *p));
+ assert_se(l = path_join(original_dir, *link));
assert_se(mkdir_parents(l, 0755) >= 0);
assert_se(symlink(f, l) == 0);
_cleanup_free_ char *buf, *f;
size_t sz;
- assert_se(f = strappend(copy_dir, *p));
+ assert_se(f = path_join(copy_dir, *p));
assert_se(access(f, F_OK) == 0);
assert_se(read_full_file(f, &buf, &sz) == 0);
search_dirs = strv_new("/dir1", "/dir2", "/dir3");
assert_se(search_dirs);
STRV_FOREACH(d, search_dirs) {
- char *p = strappend(tmp_dir, *d);
+ char *p = path_join(tmp_dir, *d);
assert_se(p);
assert_se(strv_push(&absolute_dirs, p) == 0);
}
assert_se(streq(zero, ""));
}
-static void test_strappend(void) {
- _cleanup_free_ char *t1, *t2, *t3, *t4;
-
- t1 = strappend(NULL, NULL);
- assert_se(streq(t1, ""));
-
- t2 = strappend(NULL, "suf");
- assert_se(streq(t2, "suf"));
-
- t3 = strappend("pre", NULL);
- assert_se(streq(t3, "pre"));
-
- t4 = strappend("pre", "suf");
- assert_se(streq(t4, "presuf"));
-}
-
static void test_string_has_cc(void) {
assert_se(string_has_cc("abc\1", NULL));
assert_se(string_has_cc("abc\x7f", NULL));
test_strextend();
test_strextend_with_separator();
test_strrep();
- test_strappend();
test_string_has_cc();
test_ascii_strlower();
test_strshorten();
return r;
}
- p = strappend("../usr/share/zoneinfo/", c->zone);
+ p = path_join("../usr/share/zoneinfo", c->zone);
if (!p)
return log_oom();
case CREATE_SYMLINK:
if (!i.argument) {
- i.argument = path_join("/usr/share/factory/", i.path);
+ i.argument = path_join("/usr/share/factory", i.path);
if (!i.argument)
return log_oom();
}
case COPY_FILES:
if (!i.argument) {
- i.argument = path_join(arg_root, "/usr/share/factory/", i.path);
+ i.argument = path_join(arg_root, "/usr/share/factory", i.path);
if (!i.argument)
return log_oom();
if (!startswith(de->d_name, "ask."))
continue;
- p = strappend("/run/systemd/ask-password/", de->d_name);
+ p = path_join("/run/systemd/ask-password", de->d_name);
if (!p)
return log_oom();