summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2017-06-01 00:12:32 +0900
committerSven Eden <yamakuzure@gmx.net>2017-07-25 09:46:52 +0200
commite9eacf18de0e1fe360469958095d9e22bc7b36b2 (patch)
treecd65909d6a936a510a647ef240c38aa279fc19b4 /src
parent18b9ec874ae92e1b9b7daf91eee8b378a314f92a (diff)
sd-login: sd_get_machine_names(): do not return -EINVAL when output parameter is NULL
Other functions in sd-login generally allow the output parameter to be NULL, in which case only the number of items that would be stored in the array is returned. Be nice and do the same here.
Diffstat (limited to 'src')
-rw-r--r--src/libelogind/sd-login/sd-login.c12
-rw-r--r--src/libelogind/sd-login/test-login.c3
2 files changed, 8 insertions, 7 deletions
diff --git a/src/libelogind/sd-login/sd-login.c b/src/libelogind/sd-login/sd-login.c
index 7630e6265..5f90ba70c 100644
--- a/src/libelogind/sd-login/sd-login.c
+++ b/src/libelogind/sd-login/sd-login.c
@@ -942,14 +942,13 @@ _public_ int sd_get_uids(uid_t **users) {
}
_public_ int sd_get_machine_names(char ***machines) {
- char **l = NULL, **a, **b;
+ char **l, **a, **b;
int r;
- assert_return(machines, -EINVAL);
-
r = get_files_in_directory("/run/systemd/machines/", &l);
if (r == -ENOENT) {
- *machines = NULL;
+ if (machines)
+ *machines = NULL;
return 0;
}
if (r < 0)
@@ -959,7 +958,7 @@ _public_ int sd_get_machine_names(char ***machines) {
r = 0;
/* Filter out the unit: symlinks */
- for (a = l, b = l; *a; a++) {
+ for (a = b = l; *a; a++) {
if (startswith(*a, "unit:") || !machine_name_is_valid(*a))
free(*a);
else {
@@ -972,7 +971,8 @@ _public_ int sd_get_machine_names(char ***machines) {
*b = NULL;
}
- *machines = l;
+ if (machines)
+ *machines = l;
return r;
}
diff --git a/src/libelogind/sd-login/test-login.c b/src/libelogind/sd-login/test-login.c
index 3dc797530..3eb11cf4a 100644
--- a/src/libelogind/sd-login/test-login.c
+++ b/src/libelogind/sd-login/test-login.c
@@ -251,8 +251,9 @@ static void test_login(void) {
assert_se(r >= 0);
assert_se(r == (int) strv_length(machines));
assert_se(buf = strv_join(machines, " "));
-
log_info("sd_get_machines(…) → [%i] \"%s\"", r, buf);
+
+ assert_se(sd_get_machine_names(NULL) == r);
}
}