summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/basic/cgroup-util.c2
-rw-r--r--src/basic/hashmap.c2
-rw-r--r--src/basic/hashmap.h1
-rw-r--r--src/import/pull.c16
-rw-r--r--src/nspawn/nspawn.c11
-rw-r--r--src/systemctl/systemctl.c37
-rw-r--r--src/test/test-hashmap.c43
7 files changed, 55 insertions, 57 deletions
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index 66857f118f..439c5516dc 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -1776,7 +1776,7 @@ int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t
if (!p)
p = path;
- cg_attach_fallback(n, path, pid);
+ cg_attach_fallback(n, p, pid);
}
bit <<= 1;
diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
index a84fc5b69e..7d2a4160c6 100644
--- a/src/basic/hashmap.c
+++ b/src/basic/hashmap.c
@@ -1804,8 +1804,6 @@ void *ordered_hashmap_next(OrderedHashmap *h, const void *key) {
struct ordered_hashmap_entry *e;
unsigned hash, idx;
- assert(key);
-
if (!h)
return NULL;
diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h
index 5723f09ca9..2af23024de 100644
--- a/src/basic/hashmap.h
+++ b/src/basic/hashmap.h
@@ -65,7 +65,6 @@ typedef struct {
} Iterator;
#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
-#define _IDX_ITERATOR_NIL (UINT_MAX)
#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
typedef unsigned long (*hash_func_t)(const void *p, const uint8_t hash_key[HASH_KEY_SIZE]);
diff --git a/src/import/pull.c b/src/import/pull.c
index ca33d2f3fa..ca7be6be85 100644
--- a/src/import/pull.c
+++ b/src/import/pull.c
@@ -245,15 +245,15 @@ static int pull_dkr(int argc, char *argv[], void *userdata) {
if (digest) {
reference = digest + 1;
name = strndupa(argv[1], digest - argv[1]);
- }
-
- reference = strchr(argv[1], ':');
- if (reference) {
- name = strndupa(argv[1], reference - argv[1]);
- reference++;
} else {
- name = argv[1];
- reference = "latest";
+ reference = strchr(argv[1], ':');
+ if (reference) {
+ name = strndupa(argv[1], reference - argv[1]);
+ reference++;
+ } else {
+ name = argv[1];
+ reference = "latest";
+ }
}
if (!dkr_name_is_valid(name)) {
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index d1154de08a..4cf2d14ae2 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -1538,7 +1538,16 @@ static int setup_resolv_conf(const char *dest) {
r = copy_file("/etc/resolv.conf", where, O_TRUNC|O_NOFOLLOW, 0644, 0);
if (r < 0) {
- log_warning_errno(r, "Failed to copy /etc/resolv.conf to %s: %m", where);
+ /* If the file already exists as symlink, let's
+ * suppress the warning, under the assumption that
+ * resolved or something similar runs inside and the
+ * symlink points there.
+ *
+ * If the disk image is read-only, there's also no
+ * point in complaining.
+ */
+ log_full_errno(IN_SET(r, -ELOOP, -EROFS) ? LOG_DEBUG : LOG_WARNING, r,
+ "Failed to copy /etc/resolv.conf to %s: %m", where);
return 0;
}
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 23fc946fbf..538838b7fc 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -5855,23 +5855,15 @@ static int run_editor(char **paths) {
if (pid == 0) {
const char **args;
- char *editor;
+ char *editor, **editor_args = NULL;
char **tmp_path, **original_path, *p;
- unsigned i = 1;
+ unsigned n_editor_args = 0, i = 1;
size_t argc;
(void) reset_all_signal_handlers();
(void) reset_signal_mask();
argc = strv_length(paths)/2 + 1;
- args = newa(const char*, argc + 1);
-
- args[0] = NULL;
- STRV_FOREACH_PAIR(original_path, tmp_path, paths) {
- args[i] = *tmp_path;
- i++;
- }
- args[argc] = NULL;
/* SYSTEMD_EDITOR takes precedence over EDITOR which takes precedence over VISUAL
* If neither SYSTEMD_EDITOR nor EDITOR nor VISUAL are present,
@@ -5884,9 +5876,30 @@ static int run_editor(char **paths) {
editor = getenv("VISUAL");
if (!isempty(editor)) {
- args[0] = editor;
- execvp(editor, (char* const*) args);
+ editor_args = strv_split(editor, WHITESPACE);
+ if (!editor_args) {
+ (void) log_oom();
+ _exit(EXIT_FAILURE);
+ }
+ n_editor_args = strv_length(editor_args);
+ argc += n_editor_args - 1;
}
+ args = newa(const char*, argc + 1);
+
+ if (n_editor_args > 0) {
+ args[0] = editor_args[0];
+ for (; i < n_editor_args; i++)
+ args[i] = editor_args[i];
+ }
+
+ STRV_FOREACH_PAIR(original_path, tmp_path, paths) {
+ args[i] = *tmp_path;
+ i++;
+ }
+ args[i] = NULL;
+
+ if (n_editor_args > 0)
+ execvp(args[0], (char* const*) args);
FOREACH_STRING(p, "editor", "nano", "vim", "vi") {
args[0] = p;
diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
index 767cbd90e9..d0e65001f5 100644
--- a/src/test/test-hashmap.c
+++ b/src/test/test-hashmap.c
@@ -24,38 +24,17 @@ void test_hashmap_funcs(void);
void test_ordered_hashmap_funcs(void);
static void test_ordered_hashmap_next(void) {
- OrderedHashmap *m;
- char *val1, *val2, *val3, *val4, *r;
-
- m = ordered_hashmap_new(&string_hash_ops);
- val1 = strdup("val1");
- assert_se(val1);
- val2 = strdup("val2");
- assert_se(val2);
- val3 = strdup("val3");
- assert_se(val3);
- val4 = strdup("val4");
- assert_se(val4);
-
- ordered_hashmap_put(m, "key 1", val1);
- ordered_hashmap_put(m, "key 2", val2);
- ordered_hashmap_put(m, "key 3", val3);
- ordered_hashmap_put(m, "key 4", val4);
-
- r = ordered_hashmap_next(m, "key 1");
- assert_se(streq(r, val2));
- r = ordered_hashmap_next(m, "key 2");
- assert_se(streq(r, val3));
- r = ordered_hashmap_next(m, "key 3");
- assert_se(streq(r, val4));
- r = ordered_hashmap_next(m, "key 4");
- assert_se(!r);
- r = ordered_hashmap_next(NULL, "key 1");
- assert_se(!r);
- r = ordered_hashmap_next(m, "key 5");
- assert_se(!r);
-
- ordered_hashmap_free_free(m);
+ _cleanup_ordered_hashmap_free_ OrderedHashmap *m = NULL;
+ int i;
+
+ assert_se(m = ordered_hashmap_new(NULL));
+ for (i = -2; i <= 2; i++)
+ assert_se(ordered_hashmap_put(m, INT_TO_PTR(i), INT_TO_PTR(i+10)) == 1);
+ for (i = -2; i <= 1; i++)
+ assert_se(ordered_hashmap_next(m, INT_TO_PTR(i)) == INT_TO_PTR(i+11));
+ assert_se(!ordered_hashmap_next(m, INT_TO_PTR(2)));
+ assert_se(!ordered_hashmap_next(NULL, INT_TO_PTR(1)));
+ assert_se(!ordered_hashmap_next(m, INT_TO_PTR(3)));
}
static void test_uint64_compare_func(void) {