On Wed, 28.11.12 01:30, Tom Gundersen (t...@jklm.no) wrote: > If the path to init is not specified as an argumnt to systemctl, but > init= is given on the kernel commandline, use that. > > This means the initrd does not need glue code to parse the kernel > commandline before passing on init= to systemctl.
Looks OK. > - const char *root, *init; > + int r; > + const char *root; > + char *init = NULL; Might want to use _cleanup_free_ for this. > > l = strv_length(args); > if (l < 2 || l > 3) { > @@ -3332,9 +3334,22 @@ static int switch_root(DBusConnection *bus, char > **args) { > } > > root = args[1]; > - init = l >= 3 ? args[2] : ""; > > - return bus_method_call_with_reply ( > + if (l >= 3) { > + init = strdup(args[2]); > + } else { Please don't use {} for single-line if blocks. This isn't PHP ;-)... > + parse_env_file("/proc/cmdline", WHITESPACE, > + "init", &init, > + NULL); > + > + if (!init) > + init = strdup(""); > + > + } You should check init for OOM here. > + > + log_debug("switching root - root: %s; init: %s", root, init); > + > + r = bus_method_call_with_reply ( > bus, > "org.freedesktop.systemd1", > "/org/freedesktop/systemd1", > @@ -3345,6 +3360,10 @@ static int switch_root(DBusConnection *bus, char > **args) { > DBUS_TYPE_STRING, &root, > DBUS_TYPE_STRING, &init, > DBUS_TYPE_INVALID); > + > + free(init); > + > + return r; > } > > static int set_environment(DBusConnection *bus, char **args) { Otherwise looks good. Lennart -- Lennart Poettering - Red Hat, Inc. _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel