mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
Merge pull request #11002 from keszybz/path_join-merging
Path join merging
This commit is contained in:
@@ -43,10 +43,7 @@ static int prepare_filename(const char *filename, char **ret) {
|
||||
if (!dir)
|
||||
return -ENOMEM;
|
||||
|
||||
if (with_instance)
|
||||
c = path_join(NULL, dir, with_instance);
|
||||
else
|
||||
c = path_join(NULL, dir, name);
|
||||
c = path_join(dir, with_instance ?: name);
|
||||
if (!c)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -216,7 +216,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
|
||||
p2 = path_startswith(path, *dir);
|
||||
if (p2) {
|
||||
/* Our new entry has higher priority */
|
||||
t = path_join(root, path, NULL);
|
||||
t = path_join(root, path);
|
||||
if (!t)
|
||||
return log_oom();
|
||||
|
||||
@@ -232,7 +232,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
|
||||
/* … we are not there yet, let's continue */
|
||||
}
|
||||
|
||||
t = path_join(root, path, NULL);
|
||||
t = path_join(root, path);
|
||||
if (!t)
|
||||
return log_oom();
|
||||
|
||||
@@ -318,7 +318,7 @@ int conf_files_list_with_replacement(
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to extend config file list: %m");
|
||||
|
||||
p = path_join(root, replacement, NULL);
|
||||
p = path_join(root, replacement);
|
||||
if (!p)
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ int path_make_absolute_cwd(const char *p, char **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
c = path_join(NULL, cwd, p);
|
||||
c = path_join(cwd, p);
|
||||
}
|
||||
if (!c)
|
||||
return -ENOMEM;
|
||||
@@ -481,44 +481,39 @@ bool path_equal_or_files_same(const char *a, const char *b, int flags) {
|
||||
return path_equal(a, b) || files_same(a, b, flags) > 0;
|
||||
}
|
||||
|
||||
char* path_join_many_internal(const char *first, ...) {
|
||||
char* path_join_internal(const char *first, ...) {
|
||||
char *joined, *q;
|
||||
const char *p;
|
||||
va_list ap;
|
||||
bool slash;
|
||||
size_t sz;
|
||||
|
||||
assert(first);
|
||||
|
||||
/* Joins all listed strings until NULL and places an "/" between them unless the strings end/begin already with
|
||||
* one so that it is unnecessary. Note that "/" which are already duplicate won't be removed. The string
|
||||
* returned is hence always equal or longer than the sum of the lengths of each individual string.
|
||||
/* Joins all listed strings until the sentinel and places a "/" between them unless the strings end/begin
|
||||
* already with one so that it is unnecessary. Note that slashes which are already duplicate won't be
|
||||
* removed. The string returned is hence always equal to or longer than the sum of the lengths of each
|
||||
* individual string.
|
||||
*
|
||||
* Note: any listed empty string is simply skipped. This can be useful for concatenating strings of which some
|
||||
* are optional.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* path_join_many("foo", "bar") → "foo/bar"
|
||||
* path_join_many("foo/", "bar") → "foo/bar"
|
||||
* path_join_many("", "foo", "", "bar", "") → "foo/bar" */
|
||||
* path_join("foo", "bar") → "foo/bar"
|
||||
* path_join("foo/", "bar") → "foo/bar"
|
||||
* path_join("", "foo", "", "bar", "") → "foo/bar" */
|
||||
|
||||
sz = strlen(first);
|
||||
sz = strlen_ptr(first);
|
||||
va_start(ap, first);
|
||||
while ((p = va_arg(ap, char*))) {
|
||||
|
||||
if (*p == 0) /* Skip empty items */
|
||||
continue;
|
||||
|
||||
sz += 1 + strlen(p);
|
||||
}
|
||||
while ((p = va_arg(ap, char*)) != (const char*) -1)
|
||||
if (!isempty(p))
|
||||
sz += 1 + strlen(p);
|
||||
va_end(ap);
|
||||
|
||||
joined = new(char, sz + 1);
|
||||
if (!joined)
|
||||
return NULL;
|
||||
|
||||
if (first[0] != 0) {
|
||||
if (!isempty(first)) {
|
||||
q = stpcpy(joined, first);
|
||||
slash = endswith(first, "/");
|
||||
} else {
|
||||
@@ -529,9 +524,8 @@ char* path_join_many_internal(const char *first, ...) {
|
||||
}
|
||||
|
||||
va_start(ap, first);
|
||||
while ((p = va_arg(ap, char*))) {
|
||||
|
||||
if (*p == 0) /* Skip empty items */
|
||||
while ((p = va_arg(ap, char*)) != (const char*) -1) {
|
||||
if (isempty(p))
|
||||
continue;
|
||||
|
||||
if (!slash && p[0] != '/')
|
||||
|
||||
@@ -49,13 +49,8 @@ char* path_startswith(const char *path, const char *prefix) _pure_;
|
||||
int path_compare(const char *a, const char *b) _pure_;
|
||||
bool path_equal(const char *a, const char *b) _pure_;
|
||||
bool path_equal_or_files_same(const char *a, const char *b, int flags);
|
||||
char* path_join_many_internal(const char *first, ...) _sentinel_;
|
||||
#define path_join_many(x, ...) path_join_many_internal(x, __VA_ARGS__, NULL)
|
||||
static inline char* path_join(const char *root, const char *path, const char *rest) {
|
||||
assert(path);
|
||||
|
||||
return path_join_many(strempty(root), path, rest);
|
||||
}
|
||||
char* path_join_internal(const char *first, ...);
|
||||
#define path_join(x, ...) path_join_internal(x, __VA_ARGS__, (const char*) -1)
|
||||
|
||||
char* path_simplify(char *path, bool kill_dots);
|
||||
|
||||
|
||||
@@ -366,11 +366,9 @@ int mac_selinux_create_file_prepare_at(int dirfd, const char *path, mode_t mode)
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
abspath = path_join(NULL, p, path);
|
||||
if (!abspath)
|
||||
path = abspath = path_join(p, path);
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
path = abspath;
|
||||
}
|
||||
|
||||
r = selinux_create_file_prepare_abspath(path, mode);
|
||||
|
||||
@@ -2110,7 +2110,7 @@ int main(int argc, char *argv[]) {
|
||||
case ACTION_UPDATE_CATALOG: {
|
||||
_cleanup_free_ char *database;
|
||||
|
||||
database = path_join(arg_root, CATALOG_DATABASE, NULL);
|
||||
database = path_join(arg_root, CATALOG_DATABASE);
|
||||
if (!database) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
|
||||
@@ -103,7 +103,7 @@ int main(int argc, char **argv) {
|
||||
N = argc - 1;
|
||||
fnames = argv + 1;
|
||||
} else {
|
||||
pkts_glob = path_join(NULL, get_testdata_dir(), "test-resolve/*.pkts");
|
||||
pkts_glob = path_join(get_testdata_dir(), "test-resolve/*.pkts");
|
||||
assert_se(glob(pkts_glob, GLOB_NOSORT, NULL, &g) == 0);
|
||||
N = g.gl_pathc;
|
||||
fnames = g.gl_pathv;
|
||||
|
||||
@@ -1464,7 +1464,7 @@ static int unit_file_search(
|
||||
STRV_FOREACH(p, paths->search_path) {
|
||||
char *path;
|
||||
|
||||
path = path_join(NULL, *p, dropin_dir_name);
|
||||
path = path_join(*p, dropin_dir_name);
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1478,7 +1478,7 @@ static int unit_file_search(
|
||||
STRV_FOREACH(p, paths->search_path) {
|
||||
char *path;
|
||||
|
||||
path = path_join(NULL, *p, dropin_template_dir_name);
|
||||
path = path_join(*p, dropin_template_dir_name);
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static void load_testdata_env(void) {
|
||||
assert_se(readlink_and_make_absolute("/proc/self/exe", &s) >= 0);
|
||||
dirname(s);
|
||||
|
||||
envpath = path_join(NULL, s, "systemd-runtest.env");
|
||||
envpath = path_join(s, "systemd-runtest.env");
|
||||
if (load_env_file_pairs(NULL, envpath, &pairs) < 0)
|
||||
return;
|
||||
|
||||
|
||||
@@ -2425,7 +2425,7 @@ static int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **re
|
||||
_cleanup_free_ char *path = NULL, *lpath = NULL;
|
||||
int r;
|
||||
|
||||
path = path_join(NULL, *p, unit_name);
|
||||
path = path_join(*p, unit_name);
|
||||
if (!path)
|
||||
return log_oom();
|
||||
|
||||
@@ -3516,9 +3516,9 @@ static int load_kexec_kernel(void) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
kernel = path_join(NULL, where, e->kernel);
|
||||
kernel = path_join(where, e->kernel);
|
||||
if (!strv_isempty(e->initrd))
|
||||
initrd = path_join(NULL, where, *e->initrd);
|
||||
initrd = path_join(where, *e->initrd);
|
||||
options = strv_join(e->options, " ");
|
||||
if (!options)
|
||||
return log_oom();
|
||||
|
||||
@@ -781,7 +781,7 @@ int main(int argc, char *argv[]) {
|
||||
return log_tests_skipped("cgroupfs not available");
|
||||
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
test_execute_path = path_join(NULL, get_testdata_dir(), "test-execute");
|
||||
test_execute_path = path_join(get_testdata_dir(), "test-execute");
|
||||
assert_se(set_unit_path(test_execute_path) >= 0);
|
||||
|
||||
/* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test
|
||||
|
||||
@@ -25,7 +25,7 @@ static void test_basic_parsing(void) {
|
||||
_cleanup_free_ char *journal_data_path = NULL;
|
||||
int r;
|
||||
|
||||
journal_data_path = path_join(NULL, get_testdata_dir(), "journal-data/journal-1.txt");
|
||||
journal_data_path = path_join(get_testdata_dir(), "journal-data/journal-1.txt");
|
||||
imp.fd = open(journal_data_path, O_RDONLY|O_CLOEXEC);
|
||||
assert_se(imp.fd >= 0);
|
||||
|
||||
@@ -56,7 +56,7 @@ static void test_bad_input(void) {
|
||||
_cleanup_free_ char *journal_data_path = NULL;
|
||||
int r;
|
||||
|
||||
journal_data_path = path_join(NULL, get_testdata_dir(), "journal-data/journal-2.txt");
|
||||
journal_data_path = path_join(get_testdata_dir(), "journal-data/journal-2.txt");
|
||||
imp.fd = open(journal_data_path, O_RDONLY|O_CLOEXEC);
|
||||
assert_se(imp.fd >= 0);
|
||||
|
||||
|
||||
@@ -123,9 +123,9 @@ static void test_path_is_mount_point(void) {
|
||||
|
||||
/* file mountpoints */
|
||||
assert_se(mkdtemp(tmp_dir) != NULL);
|
||||
file1 = path_join(NULL, tmp_dir, "file1");
|
||||
file1 = path_join(tmp_dir, "file1");
|
||||
assert_se(file1);
|
||||
file2 = path_join(NULL, tmp_dir, "file2");
|
||||
file2 = path_join(tmp_dir, "file2");
|
||||
assert_se(file2);
|
||||
fd = open(file1, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664);
|
||||
assert_se(fd > 0);
|
||||
@@ -133,10 +133,10 @@ static void test_path_is_mount_point(void) {
|
||||
fd = open(file2, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664);
|
||||
assert_se(fd > 0);
|
||||
close(fd);
|
||||
link1 = path_join(NULL, tmp_dir, "link1");
|
||||
link1 = path_join(tmp_dir, "link1");
|
||||
assert_se(link1);
|
||||
assert_se(symlink("file1", link1) == 0);
|
||||
link2 = path_join(NULL, tmp_dir, "link2");
|
||||
link2 = path_join(tmp_dir, "link2");
|
||||
assert_se(link1);
|
||||
assert_se(symlink("file2", link2) == 0);
|
||||
|
||||
@@ -146,16 +146,16 @@ static void test_path_is_mount_point(void) {
|
||||
assert_se(path_is_mount_point(link1, NULL, 0) == 0);
|
||||
|
||||
/* directory mountpoints */
|
||||
dir1 = path_join(NULL, tmp_dir, "dir1");
|
||||
dir1 = path_join(tmp_dir, "dir1");
|
||||
assert_se(dir1);
|
||||
assert_se(mkdir(dir1, 0755) == 0);
|
||||
dirlink1 = path_join(NULL, tmp_dir, "dirlink1");
|
||||
dirlink1 = path_join(tmp_dir, "dirlink1");
|
||||
assert_se(dirlink1);
|
||||
assert_se(symlink("dir1", dirlink1) == 0);
|
||||
dirlink1file = path_join(NULL, tmp_dir, "dirlink1file");
|
||||
dirlink1file = path_join(tmp_dir, "dirlink1file");
|
||||
assert_se(dirlink1file);
|
||||
assert_se(symlink("dirlink1/file", dirlink1file) == 0);
|
||||
dir2 = path_join(NULL, tmp_dir, "dir2");
|
||||
dir2 = path_join(tmp_dir, "dir2");
|
||||
assert_se(dir2);
|
||||
assert_se(mkdir(dir2, 0755) == 0);
|
||||
|
||||
@@ -165,7 +165,7 @@ static void test_path_is_mount_point(void) {
|
||||
assert_se(path_is_mount_point(dirlink1, NULL, 0) == 0);
|
||||
|
||||
/* file in subdirectory mountpoints */
|
||||
dir1file = path_join(NULL, dir1, "file");
|
||||
dir1file = path_join(dir1, "file");
|
||||
assert_se(dir1file);
|
||||
fd = open(dir1file, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664);
|
||||
assert_se(fd > 0);
|
||||
@@ -206,7 +206,7 @@ static void test_path_is_mount_point(void) {
|
||||
assert_se(rlt == 1);
|
||||
|
||||
/* dirs */
|
||||
dir2file = path_join(NULL, dir2, "file");
|
||||
dir2file = path_join(dir2, "file");
|
||||
assert_se(dir2file);
|
||||
fd = open(dir2file, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664);
|
||||
assert_se(fd > 0);
|
||||
|
||||
@@ -232,23 +232,47 @@ static void test_prefixes(void) {
|
||||
|
||||
static void test_path_join(void) {
|
||||
|
||||
#define test_join(root, path, rest, expected) { \
|
||||
#define test_join(expected, ...) { \
|
||||
_cleanup_free_ char *z = NULL; \
|
||||
z = path_join(root, path, rest); \
|
||||
z = path_join(__VA_ARGS__); \
|
||||
log_debug("got \"%s\", expected \"%s\"", z, expected); \
|
||||
assert_se(streq(z, expected)); \
|
||||
}
|
||||
|
||||
test_join("/root", "/a/b", "/c", "/root/a/b/c");
|
||||
test_join("/root", "a/b", "c", "/root/a/b/c");
|
||||
test_join("/root", "/a/b", "c", "/root/a/b/c");
|
||||
test_join("/root", "/", "c", "/root/c");
|
||||
test_join("/root", "/", NULL, "/root/");
|
||||
test_join("/root/a/b/c", "/root", "/a/b", "/c");
|
||||
test_join("/root/a/b/c", "/root", "a/b", "c");
|
||||
test_join("/root/a/b/c", "/root", "/a/b", "c");
|
||||
test_join("/root/c", "/root", "/", "c");
|
||||
test_join("/root/", "/root", "/", NULL);
|
||||
|
||||
test_join(NULL, "/a/b", "/c", "/a/b/c");
|
||||
test_join(NULL, "a/b", "c", "a/b/c");
|
||||
test_join(NULL, "/a/b", "c", "/a/b/c");
|
||||
test_join(NULL, "/", "c", "/c");
|
||||
test_join(NULL, "/", NULL, "/");
|
||||
test_join("/a/b/c", "", "/a/b", "/c");
|
||||
test_join("a/b/c", "", "a/b", "c");
|
||||
test_join("/a/b/c", "", "/a/b", "c");
|
||||
test_join("/c", "", "/", "c");
|
||||
test_join("/", "", "/", NULL);
|
||||
|
||||
test_join("/a/b/c", NULL, "/a/b", "/c");
|
||||
test_join("a/b/c", NULL, "a/b", "c");
|
||||
test_join("/a/b/c", NULL, "/a/b", "c");
|
||||
test_join("/c", NULL, "/", "c");
|
||||
test_join("/", NULL, "/", NULL);
|
||||
|
||||
test_join("", "", NULL);
|
||||
test_join("", NULL, "");
|
||||
test_join("", NULL, NULL);
|
||||
|
||||
test_join("foo/bar", "foo", "bar");
|
||||
test_join("foo/bar", "", "foo", "bar");
|
||||
test_join("foo/bar", NULL, "foo", NULL, "bar");
|
||||
test_join("foo/bar", "", "foo", "", "bar", "");
|
||||
test_join("foo/bar", "", "", "", "", "foo", "", "", "", "bar", "", "", "");
|
||||
|
||||
test_join("//foo///bar//", "", "/", "", "/foo/", "", "/", "", "/bar/", "", "/", "");
|
||||
test_join("/foo/bar/", "/", "foo", "/", "bar", "/");
|
||||
test_join("foo/bar/baz", "foo", "bar", "baz");
|
||||
test_join("foo/bar/baz", "foo/", "bar", "/baz");
|
||||
test_join("foo//bar//baz", "foo/", "/bar/", "/baz");
|
||||
test_join("//foo////bar////baz//", "//foo/", "///bar/", "///baz//");
|
||||
}
|
||||
|
||||
static void test_fsck_exists(void) {
|
||||
@@ -567,43 +591,6 @@ static void test_path_startswith_set(void) {
|
||||
assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo2/bar", "/foo/quux", "", "/zzz"), NULL));
|
||||
}
|
||||
|
||||
static void test_path_join_many(void) {
|
||||
char *j;
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("", NULL), ""));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("foo", NULL), "foo"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("foo", "bar"), "foo/bar"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("", "foo", "", "bar", ""), "foo/bar"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("", "", "", "", "foo", "", "", "", "bar", "", "", ""), "foo/bar"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("", "/", "", "/foo/", "", "/", "", "/bar/", "", "/", ""), "//foo///bar//"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("/", "foo", "/", "bar", "/"), "/foo/bar/"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("foo", "bar", "baz"), "foo/bar/baz"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("foo/", "bar", "/baz"), "foo/bar/baz"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("foo/", "/bar/", "/baz"), "foo//bar//baz"));
|
||||
free(j);
|
||||
|
||||
assert_se(streq_ptr(j = path_join_many("//foo/", "///bar/", "///baz//"), "//foo////bar////baz//"));
|
||||
free(j);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
test_setup_logging(LOG_DEBUG);
|
||||
|
||||
@@ -625,7 +612,6 @@ int main(int argc, char **argv) {
|
||||
test_skip_dev_prefix();
|
||||
test_empty_or_root();
|
||||
test_path_startswith_set();
|
||||
test_path_join_many();
|
||||
|
||||
test_systemd_installation_has_version(argv[1]); /* NULL is OK */
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
test_setup_logging(LOG_INFO);
|
||||
|
||||
test_path = path_join(NULL, get_testdata_dir(), "test-path");
|
||||
test_path = path_join(get_testdata_dir(), "test-path");
|
||||
assert_se(set_unit_path(test_path) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ static void test_mount_points_list(const char *fname) {
|
||||
log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/self/mountinfo");
|
||||
|
||||
if (fname)
|
||||
fname = testdata_fname = path_join(NULL, get_testdata_dir(), fname);
|
||||
fname = testdata_fname = path_join(get_testdata_dir(), fname);
|
||||
|
||||
LIST_HEAD_INIT(mp_list_head);
|
||||
assert_se(mount_points_list_get(fname, &mp_list_head) >= 0);
|
||||
@@ -38,7 +38,7 @@ static void test_swap_list(const char *fname) {
|
||||
log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/swaps");
|
||||
|
||||
if (fname)
|
||||
fname = testdata_fname = path_join(NULL, get_testdata_dir(), fname);
|
||||
fname = testdata_fname = path_join(get_testdata_dir(), fname);
|
||||
|
||||
LIST_HEAD_INIT(mp_list_head);
|
||||
assert_se(swap_list_get(fname, &mp_list_head) >= 0);
|
||||
|
||||
@@ -1844,7 +1844,7 @@ static int item_do(Item *i, int fd, const char *path, fdaction_t action) {
|
||||
else {
|
||||
_cleanup_free_ char *de_path = NULL;
|
||||
|
||||
de_path = path_join(NULL, path, de->d_name);
|
||||
de_path = path_join(path, de->d_name);
|
||||
if (!de_path)
|
||||
q = log_oom();
|
||||
else
|
||||
|
||||
@@ -633,7 +633,7 @@ int udev_event_spawn(struct udev_event *event,
|
||||
if (!path_is_absolute(argv[0])) {
|
||||
char *program;
|
||||
|
||||
program = path_join(NULL, UDEVLIBEXECDIR, argv[0]);
|
||||
program = path_join(UDEVLIBEXECDIR, argv[0]);
|
||||
if (!program)
|
||||
return log_oom();
|
||||
|
||||
|
||||
@@ -200,10 +200,10 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
||||
return log_device_debug_errno(dev, r, "Failed to get id_filename: %m");
|
||||
|
||||
util_path_encode(slink + STRLEN("/dev"), name_enc, sizeof(name_enc));
|
||||
dirname = path_join(NULL, "/run/udev/links/", name_enc);
|
||||
dirname = path_join("/run/udev/links/", name_enc);
|
||||
if (!dirname)
|
||||
return log_oom();
|
||||
filename = path_join(NULL, dirname, id_filename);
|
||||
filename = path_join(dirname, id_filename);
|
||||
if (!filename)
|
||||
return log_oom();
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se
|
||||
if (arg_dry_run)
|
||||
continue;
|
||||
|
||||
filename = path_join(NULL, syspath, "uevent");
|
||||
filename = path_join(syspath, "uevent");
|
||||
if (!filename)
|
||||
return log_oom();
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ int find_device(const char *id, const char *prefix, sd_device **ret) {
|
||||
assert(ret);
|
||||
|
||||
if (prefix && !path_startswith(id, prefix)) {
|
||||
buf = path_join(NULL, prefix, id);
|
||||
buf = path_join(prefix, id);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
id = buf;
|
||||
|
||||
Reference in New Issue
Block a user