[systemd-devel] [PATCH] systemd: Add systemd.setenv for /proc/cmdline parsing.
Lennart Poettering
lennart at poettering.net
Tue Feb 7 05:56:50 PST 2012
On Mon, 06.02.12 16:21, Douglas, William (william.douglas at intel.com) wrote:
Heya,
your mailer applied line breaks to you patch. Please resend with
unbroken lines.
> + } else if (startswith(word, "systemd.setenv=")) {
> + char *eq;
> + int r;
> +
> + if (!(eq = strchr(word + 15, '=')))
For new code we try to avoid doing if checks and function calls in one
line. i.e. please use this:
eq = strchr(word + 15, '=');
if (!eq)
instead of
if (!(eq = strchr(word + 15, '=')))
Yes, the older code still uses the latter syntax.
> + log_warning("Failed to parse setenv switch %s.
> Ignoring.", word + 15);
I think it would make sense to have this result in usetenv() instead of
a failure message.
> + else {
> + *eq = 0;
> + r = setenv(word + 15, eq + 1, 1);
> + if (r)
> + log_warning("Failed setenv call with %s.
> Ignoring", strerror(-r));
This is incorrect. You need to use errno in strerror(), not -r.
> + *eq = '=';
Humpf. Not sure I like this. "word" is actually a const char, so you are
changing something const here.
Note that the string passed here is actually sometimes from argv[],
which is visible outside of the local process through
/proc/1/cmdline. If for a short moment you make a change to it, and then
undo it, this will be visible outside. This will most likely not be a
problem, but is still quite ugly I'd claim.
Hence please, do an strdup() here, and free the string afterwards.
Lennart
--
Lennart Poettering - Red Hat, Inc.
More information about the systemd-devel
mailing list