]> git.ipfire.org Git - thirdparty/systemd.git/commit
env-util,fileio: immediately replace variables in load_env_file_push()
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 11 Feb 2017 04:08:53 +0000 (23:08 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 20 Feb 2017 23:49:14 +0000 (18:49 -0500)
commit99003e01b6f7171f884ee6da663326aa1aa44e2b
tree14aa619ccb9244491f7df9c7f5775f51a3a64019
parentac466818814f347b74ece4463e6f1ec662257e19
env-util,fileio: immediately replace variables in load_env_file_push()

strv_env_replace was calling env_match(), which in effect allowed multiple
values for the same key to be inserted into the environment block. That's
pointless, because APIs to access variables only return a single value (the
latest entry), so it's better to keep the block clean, i.e. with just a single
entry for each key.

Add a new helper function that simply tests if the part before '=' is equal in
two strings and use that in strv_env_replace.

In load_env_file_push, use strv_env_replace to immediately replace the previous
assignment with a matching name.

Afaict, none of the callers are materially affected by this change, but it
seems like some pointless work was being done, if the same value was set
multiple times. We'd go through parsing and assigning the value for each
entry. With this change, we handle just the last one.
src/basic/env-util.c
src/basic/fileio.c
src/test/test-fileio.c