X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Fsd-login.c;h=1d4368187f5f430de16a692f69279714aeccef84;hb=9847946e12479b27d3ebfd024f00a6ac33ce73d3;hp=a0a56c49526ebdf2fb85a83137418b2e8c77d679;hpb=b72491a2fd8c237299055c636d4f748bca2b4b1f;p=elogind.git diff --git a/src/login/sd-login.c b/src/login/sd-login.c index a0a56c495..1d4368187 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -121,6 +121,33 @@ _public_ int sd_pid_get_session(pid_t pid, char **session) { return 0; } +_public_ int sd_pid_get_service(pid_t pid, char **service) { + int r; + char *cgroup, *p; + + if (!service) + return -EINVAL; + + r = pid_get_cgroup(pid, NULL, &cgroup); + if (r < 0) + return r; + + if (!startswith(cgroup, "/system/")) { + free(cgroup); + return -ENOENT; + } + + p = cgroup + 8; + p = strndup(p, strcspn(p, "/")); + free(cgroup); + + if (!p) + return -ENOMEM; + + *service = p; + return 0; +} + _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) { int r; char *root, *cgroup, *p, *cc;