return r;
STRV_FOREACH(i, machines) {
- _cleanup_bus_unref_ sd_bus *container = NULL;
+ _cleanup_bus_close_unref_ sd_bus *container = NULL;
int k;
r = sd_bus_open_system_container(&container, *i);
}
n_units = hashmap_size(h);
+
units = new(UnitFileList, n_units);
- if (!units) {
+ if (!units && n_units > 0) {
unit_file_list_free(h);
return log_oom();
}
return bus_log_parse_error(r);
}
- if (c > 0) {
- qsort(units, c, sizeof(UnitFileList), compare_unit_file_list);
- output_unit_file_list(units, c);
- }
+ qsort_safe(units, c, sizeof(UnitFileList), compare_unit_file_list);
+ output_unit_file_list(units, c);
- if (avoid_bus())
+ if (avoid_bus()) {
for (unit = units; unit < units + c; unit++)
free(unit->path);
+ }
return 0;
}
}
static int get_machine_properties(sd_bus *bus, struct machine_info *mi) {
- _cleanup_bus_unref_ sd_bus *container = NULL;
+ _cleanup_bus_close_unref_ sd_bus *container = NULL;
int r;
assert(mi);
log_error("Job for %s canceled.", strna(d->name));
else if (streq(d->result, "dependency"))
log_error("A dependency job for %s failed. See 'journalctl -xn' for details.", strna(d->name));
- else if (!streq(d->result, "done") && !streq(d->result, "skipped"))
- log_error("Job for %s failed. See 'systemctl status %s' and 'journalctl -xn' for details.", strna(d->name), strna(d->name));
+ else if (!streq(d->result, "done") && !streq(d->result, "skipped")) {
+ if (d->name) {
+ bool quotes;
+
+ quotes = chars_intersect(d->name, SHELL_NEED_QUOTES);
+
+ log_error("Job for %s failed. See \"systemctl status %s%s%s\" and \"journalctl -xn\" for details.",
+ d->name,
+ quotes ? "'" : "", d->name, quotes ? "'" : "");
+ } else
+ log_error("Job failed. See \"journalctl -xn\" for details.");
+ }
}
if (streq(d->result, "timeout"))
while (!set_isempty(s)) {
q = bus_process_wait(bus);
if (q < 0) {
- log_error("Failed to wait for response: %s", strerror(-r));
+ log_error("Failed to wait for response: %s", strerror(-q));
return q;
}
const char *root_systemd_path = NULL, *root_init_path = NULL;
root_systemd_path = strappenda(root, "/" SYSTEMD_BINARY_PATH);
- root_init_path = strappenda3(root, "/", init);
+ root_init_path = strappenda(root, "/", init);
/* If the passed init is actually the same as the
* systemd binary, then let's suppress it. */
}
int main(int argc, char*argv[]) {
- _cleanup_bus_unref_ sd_bus *bus = NULL;
+ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
int r;
setlocale(LC_ALL, "");