X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=2fa8ecc6644fd567494e1d912f0f0472aceca973;hp=7bc8ece0424c3f063caebe822424e292d0e58836;hb=05cae7f3431446236139434ee58a6275f3cb31e8;hpb=6b01f1d3911bd7c7eadbb8a3b4375bd3ac05c98f diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 7bc8ece04..2fa8ecc66 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -2305,6 +2305,7 @@ static int enable_wait_for_jobs(sd_bus *bus) { r = sd_bus_add_match( bus, + NULL, "type='signal'," "sender='org.freedesktop.systemd1'," "interface='org.freedesktop.systemd1.Manager'," @@ -2364,13 +2365,14 @@ static int check_wait_response(WaitData *d) { } static int wait_for_jobs(sd_bus *bus, Set *s) { + _cleanup_bus_slot_unref_ sd_bus_slot *slot = NULL; WaitData d = { .set = s }; int r = 0, q; assert(bus); assert(s); - q = sd_bus_add_filter(bus, wait_filter, &d); + q = sd_bus_add_filter(bus, &slot, wait_filter, &d); if (q < 0) return log_oom(); @@ -2398,10 +2400,6 @@ static int wait_for_jobs(sd_bus *bus, Set *s) { d.result = NULL; } - q = sd_bus_remove_filter(bus, wait_filter, &d); - if (q < 0 && r == 0) - r = q; - return r; } @@ -2886,8 +2884,8 @@ static int check_inhibitors(sd_bus *bus, enum action a) { get_process_comm(pid, &comm); user = uid_to_name(uid); - log_warning("Operation inhibited by \"%s\" (PID %lu \"%s\", user %s), reason is \"%s\".", - who, (unsigned long) pid, strna(comm), strna(user), why); + log_warning("Operation inhibited by \"%s\" (PID "PID_FMT" \"%s\", user %s), reason is \"%s\".", + who, pid, strna(comm), strna(user), why); c++; } @@ -4258,7 +4256,7 @@ static int get_unit_dbus_path_by_pid( &reply, "u", pid); if (r < 0) { - log_error("Failed to get unit for PID %lu: %s", (unsigned long) pid, bus_error_message(&error, r)); + log_error("Failed to get unit for PID "PID_FMT": %s", pid, bus_error_message(&error, r)); return r; } @@ -4285,7 +4283,7 @@ static int show_all( _cleanup_free_ UnitInfo *unit_infos = NULL; const UnitInfo *u; unsigned c; - int r; + int r, ret = 0; r = get_unit_list(bus, NULL, NULL, &unit_infos, 0, &reply); if (r < 0) @@ -4307,9 +4305,11 @@ static int show_all( r = show_one(verb, bus, p, show_properties, new_line, ellipsized); if (r < 0) return r; + else if (r > 0 && ret == 0) + ret = r; } - return 0; + return ret; } static int show_system_status(sd_bus *bus) { @@ -4431,7 +4431,12 @@ static int show(sd_bus *bus, char **args) { } } - show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized); + r = show_one(args[0], bus, unit, show_properties, + &new_line, &ellipsized); + if (r < 0) + return r; + else if (r > 0 && ret == 0) + ret = r; } if (!strv_isempty(patterns)) { @@ -4448,7 +4453,12 @@ static int show(sd_bus *bus, char **args) { if (!unit) return log_oom(); - show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized); + r = show_one(args[0], bus, unit, show_properties, + &new_line, &ellipsized); + if (r < 0) + return r; + else if (r > 0 && ret == 0) + ret = r; } } } @@ -4992,18 +5002,18 @@ static int enable_sysv_units(const char *verb, char **args) { /* Processes all SysV units, and reshuffles the array so that * afterwards only the native units remain */ - r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, NULL, NULL, NULL); + r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, arg_root, NULL, NULL, NULL); if (r < 0) return r; r = 0; for (f = 0; args[f]; f++) { const char *name; - _cleanup_free_ char *p = NULL, *q = NULL; + _cleanup_free_ char *p = NULL, *q = NULL, *l = NULL; bool found_native = false, found_sysv; unsigned c = 1; const char *argv[6] = { "/sbin/chkconfig", NULL, NULL, NULL, NULL }; - char **k, *l; + char **k; int j; pid_t pid; siginfo_t status; @@ -5017,6 +5027,8 @@ static int enable_sysv_units(const char *verb, char **args) { continue; STRV_FOREACH(k, paths.unit_path) { + _cleanup_free_ char *path = NULL; + if (!isempty(arg_root)) asprintf(&p, "%s/%s/%s", arg_root, *k, name); else @@ -5028,9 +5040,6 @@ static int enable_sysv_units(const char *verb, char **args) { } found_native = access(p, F_OK) >= 0; - free(p); - p = NULL; - if (found_native) break; } @@ -5047,9 +5056,8 @@ static int enable_sysv_units(const char *verb, char **args) { goto finish; } - p[strlen(p) - sizeof(".service") + 1] = 0; + p[strlen(p) - strlen(".service")] = 0; found_sysv = access(p, F_OK) >= 0; - if (!found_sysv) continue; @@ -5074,7 +5082,6 @@ static int enable_sysv_units(const char *verb, char **args) { } log_info("Executing %s", l); - free(l); pid = fork(); if (pid < 0) {