_public_ int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **ret) { int r; assert_return(c, -EINVAL); assert_return(ret, -EINVAL); if (!(c->mask & SD_BUS_CREDS_USER_UNIT)) return -ENODATA; assert(c->cgroup); if (!c->user_unit) { const char *shifted; r = cg_shift_path(c->cgroup, c->cgroup_root, &shifted); if (r < 0) return r; r = cg_path_get_user_unit(shifted, (char**) &c->user_unit); if (r < 0) return r; } *ret = c->user_unit; return 0; }
static void check_p_g_u_u(const char *path, int code, const char *result) { _cleanup_free_ char *unit = NULL; int r; r = cg_path_get_user_unit(path, &unit); printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, result, code); assert_se(r == code); assert_se(streq_ptr(unit, result)); }