chiark / gitweb /
systemctl: properly handle job results
[elogind.git] / src / systemctl.c
index 82741bc6e739bea3ee64d2939687831f308c933a..b33a89f63d76d9bd3ae05d28db2f5b35a75aca4d 100644 (file)
@@ -1248,11 +1248,19 @@ static int wait_for_jobs(DBusConnection *bus, Set *s) {
                         log_error("Job canceled.");
                 else if (streq(d.result, "dependency"))
                         log_error("A dependency job failed. See system logs for details.");
-                else
+                else if (!streq(d.result, "done"))
                         log_error("Job failed. See system logs and 'systemctl status' for details.");
         }
 
-        r = d.result ? -EIO : 0;
+        if (streq_ptr(d.result, "timeout"))
+                r = -ETIME;
+        else if (streq_ptr(d.result, "canceled"))
+                r = -ECANCELED;
+        else if (!streq_ptr(d.result, "done"))
+                r = -EIO;
+        else
+                r = 0;
+
         free(d.result);
 
 finish: