+
+fail:
+ log_error("Failed to parse reply: %s", strerror(-r));
+ return -EIO;
+}
+
+static int show_scope_cgroup(sd_bus *bus, const char *unit, pid_t leader) {
+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_free_ char *path = NULL;
+ const char *cgroup;
+ int r, output_flags;
+ unsigned c;
+
+ assert(bus);
+ assert(unit);
+
+ if (arg_transport == TRANSPORT_SSH)
+ return 0;
+
+ path = unit_dbus_path_from_name(unit);
+ if (!path)
+ return log_oom();
+
+ r = sd_bus_call_method(
+ bus,
+ "org.freedesktop.systemd1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &error,
+ &reply,
+ "ss",
+ "org.freedesktop.systemd1.Scope",
+ "ControlGroup");
+ if (r < 0) {
+ log_error("Failed to query ControlGroup: %s", bus_error_message(&error, -r));
+ return r;
+ }
+
+ r = sd_bus_message_read(reply, "v", "s", &cgroup);
+ if (r < 0) {
+ log_error("Failed to parse reply: %s", strerror(-r));
+ return r;
+ }
+
+ if (isempty(cgroup))
+ return 0;
+
+ if (cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, cgroup, false) != 0 && leader <= 0)
+ return 0;
+
+ output_flags =
+ arg_all * OUTPUT_SHOW_ALL |
+ arg_full * OUTPUT_FULL_WIDTH;
+
+ c = columns();
+ if (c > 18)
+ c -= 18;
+ else
+ c = 0;
+
+ show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, cgroup, "\t\t ", c, false, &leader, leader > 0, output_flags);
+ return 0;