X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Fsd-login.c;h=06587921cd2864ca7fc59a9ad9c835d34a7bc276;hb=1021b21bc6f8dd522b46116e8598b17f9f93f1b7;hp=35deb85f2dbc58b7c3a4d16cd00ffc6338979f64;hpb=a20affe2f0fb4c8d488155a0b860549e9389f32a;p=elogind.git diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 35deb85f2..06587921c 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -72,6 +72,16 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) { return cg_pid_get_machine_name(pid, name); } +_public_ int sd_pid_get_slice(pid_t pid, char **slice) { + + if (pid < 0) + return -EINVAL; + if (!slice) + return -EINVAL; + + return cg_pid_get_slice(pid, slice); +} + _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { if (pid < 0) @@ -591,41 +601,8 @@ _public_ int sd_get_uids(uid_t **users) { return r; } -int sd_get_machine_names(char ***machines) { - _cleanup_closedir_ DIR *d = NULL; - _cleanup_strv_free_ char **l = NULL; - _cleanup_free_ char *md = NULL; - char *n; - int c = 0, r; - - r = cg_get_machine_path(&md); - if (r < 0) - return r; - - r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, md, &d); - if (r < 0) - return r; - - while ((r = cg_read_subgroup(d, &n)) > 0) { - - r = strv_push(&l, n); - if (r < 0) { - free(n); - return -ENOMEM; - } - - c++; - } - - if (r < 0) - return r; - - if (machines) { - *machines = l; - l = NULL; - } - - return c; +_public_ int sd_get_machine_names(char ***machines) { + return get_files_in_directory("/run/systemd/machines/", machines); } static inline int MONITOR_TO_FD(sd_login_monitor *m) { @@ -677,6 +654,16 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) { good = true; } + if (!category || streq(category, "machine")) { + k = inotify_add_watch(fd, "/run/systemd/machines/", IN_MOVED_TO|IN_DELETE); + if (k < 0) { + close_nointr_nofail(fd); + return -errno; + } + + good = true; + } + if (!good) { close_nointr(fd); return -EINVAL;