X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=de43c879a72227b43f3c52fb7790ab719b66e42f;hb=cedc611207b6a14cdbaf1d73e12b62ee55cc53de;hp=540b4a64c1f5077f7c5364fb2bb37f5419ec4d97;hpb=249968612f16a71df909d6e73785c18a9ff36a65;p=elogind.git diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 540b4a64c..de43c879a 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -1350,8 +1350,9 @@ static int list_unit_files(sd_bus *bus, char **args) { } 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(); } @@ -1407,14 +1408,13 @@ static int list_unit_files(sd_bus *bus, char **args) { 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; } @@ -2351,8 +2351,18 @@ static int check_wait_response(WaitData *d) { 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")) @@ -2382,7 +2392,7 @@ static int wait_for_jobs(sd_bus *bus, Set *s) { 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; } @@ -4827,7 +4837,7 @@ static int switch_root(sd_bus *bus, char **args) { 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. */