]> git.ipfire.org Git - thirdparty/systemd.git/commit
basic: support default and alternate values for env expansion
authorRay Strode <rstrode@redhat.com>
Tue, 9 Aug 2016 14:20:22 +0000 (10:20 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 21 Feb 2017 04:32:53 +0000 (23:32 -0500)
commitb82f58bfe396b395bce3452bc0ba2f972fb01ab8
tree02767a48aced8b08db4aba14890a224a97c05111
parent4bed076c5f79ce26451ea3d73950d895f630f9a7
basic: support default and alternate values for env expansion

Sometimes it's useful to provide a default value during an environment
expansion, if the environment variable isn't already set.

For instance $XDG_DATA_DIRS is suppose to default to:

/usr/local/share/:/usr/share/

if it's not yet set. That means callers wishing to augment
XDG_DATA_DIRS need to manually add those two values.

This commit changes replace_env to support the following shell
compatible default value syntax:

XDG_DATA_DIRS=/foo:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}

Likewise, it's useful to provide an alternate value during an
environment expansion, if the environment variable isn't already set.

For instance, $LD_LIBRARY_PATH will inadvertently search the current
working directory if it starts or ends with a colon, so the following
is usually wrong:

LD_LIBRARY_PATH=/foo/lib:${LD_LIBRARY_PATH}

To address that, this changes replace_env to support the following
shell compatible alternate value syntax:

LD_LIBRARY_PATH=/foo/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

[zj: gate the new syntax under REPLACE_ENV_ALLOW_EXTENDED switch, so
existing callers are not modified.]
man/environment.d.xml
src/basic/env-util.c
src/basic/env-util.h
src/basic/fileio.c
src/test/test-env-util.c
src/test/test-fileio.c