chiark / gitweb /
systemctl: fix return code in chroot
[elogind.git] / src / systemctl / systemctl.c
index d77d534e0bde068ddebdfeb907d616f060bebea0..b4b58c05b0a77192b569ee91d8fb16833eb0b167 100644 (file)
@@ -123,7 +123,6 @@ static enum transport {
         TRANSPORT_POLKIT
 } arg_transport = TRANSPORT_NORMAL;
 static const char *arg_host = NULL;
-static bool arg_follow = false;
 static unsigned arg_lines = 10;
 static OutputMode arg_output = OUTPUT_SHORT;
 
@@ -2277,7 +2276,6 @@ static void print_status_info(UnitStatusInfo *i) {
                         arg_all * OUTPUT_SHOW_ALL |
                         (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
                         on_tty() * OUTPUT_COLOR |
-                        arg_follow * OUTPUT_FOLLOW |
                         !arg_quiet * OUTPUT_WARN_CUTOFF;
 
                 printf("\n");
@@ -3331,12 +3329,13 @@ static int switch_root(DBusConnection *bus, char **args) {
 }
 
 static int set_environment(DBusConnection *bus, char **args) {
-        DBusMessage *m = NULL, *reply = NULL;
+        _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
         DBusError error;
-        int r;
         const char *method;
-        DBusMessageIter iter, sub;
-        char **name;
+        DBusMessageIter iter;
+        int r;
+
+        assert(bus);
 
         dbus_error_init(&error);
 
@@ -3344,38 +3343,22 @@ static int set_environment(DBusConnection *bus, char **args) {
                 ? "SetEnvironment"
                 : "UnsetEnvironment";
 
-        if (!(m = dbus_message_new_method_call(
-                              "org.freedesktop.systemd1",
-                              "/org/freedesktop/systemd1",
-                              "org.freedesktop.systemd1.Manager",
-                              method))) {
-
-                log_error("Could not allocate message.");
-                return -ENOMEM;
-        }
+        m = dbus_message_new_method_call(
+                        "org.freedesktop.systemd1",
+                        "/org/freedesktop/systemd1",
+                        "org.freedesktop.systemd1.Manager",
+                        method);
+        if (!m)
+                return log_oom();
 
         dbus_message_iter_init_append(m, &iter);
 
-        if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &sub)) {
-                log_error("Could not append arguments to message.");
-                r = -ENOMEM;
-                goto finish;
-        }
-
-        STRV_FOREACH(name, args+1)
-                if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, name)) {
-                        log_error("Could not append arguments to message.");
-                        r = -ENOMEM;
-                        goto finish;
-                }
-
-        if (!dbus_message_iter_close_container(&iter, &sub)) {
-                log_error("Could not append arguments to message.");
-                r = -ENOMEM;
-                goto finish;
-        }
+        r = bus_append_strv_iter(&iter, args + 1);
+        if (r < 0)
+                return log_oom();
 
-        if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) {
+        reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+        if (!reply) {
                 log_error("Failed to issue method call: %s", bus_error_message(&error));
                 r = -EIO;
                 goto finish;
@@ -3384,14 +3367,7 @@ static int set_environment(DBusConnection *bus, char **args) {
         r = 0;
 
 finish:
-        if (m)
-                dbus_message_unref(m);
-
-        if (reply)
-                dbus_message_unref(reply);
-
         dbus_error_free(&error);
-
         return r;
 }
 
@@ -3654,6 +3630,7 @@ static int enable_unit(DBusConnection *bus, char **args) {
                         }
                 }
 
+                r = 0;
         } else {
                 const char *method;
                 bool send_force = true, expect_carries_install_info = false;
@@ -3928,7 +3905,6 @@ static int systemctl_help(void) {
                "     --root=PATH      Enable unit files in the specified root directory\n"
                "     --runtime        Enable unit files only temporarily until next reboot\n"
                "  -n --lines=INTEGER  Journal entries to show\n"
-               "     --follow         Follow journal\n"
                "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
                "                      verbose, export, json, json-pretty, json-sse, cat)\n\n"
                "Unit Commands:\n"
@@ -4084,7 +4060,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                 ARG_NO_ASK_PASSWORD,
                 ARG_FAILED,
                 ARG_RUNTIME,
-                ARG_FOLLOW,
                 ARG_FORCE
         };
 
@@ -4118,7 +4093,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                 { "privileged",no_argument,       NULL, 'P'           },
                 { "runtime",   no_argument,       NULL, ARG_RUNTIME   },
                 { "lines",     required_argument, NULL, 'n'           },
-                { "follow",    no_argument,       NULL, ARG_FOLLOW    },
                 { "output",    required_argument, NULL, 'o'           },
                 { NULL,        0,                 NULL, 0             }
         };
@@ -4238,14 +4212,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         arg_force ++;
                         break;
 
-                case ARG_FOLLOW:
-                        arg_follow = true;
-                        break;
-
                 case 'f':
-                        /* -f is short for both --follow and --force! */
                         arg_force ++;
-                        arg_follow = true;
                         break;
 
                 case ARG_NO_RELOAD: