diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2020-11-12 18:23:46 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-11-23 16:48:05 +0100 |
commit | 51178d4979c9caeef95d616dcd3d47bdcd81a58e (patch) | |
tree | 2cfb79d6df18ff969ba6d7552cef899ef9f58b7a /commands | |
parent | 0c2c24508d810a59709d598474b20eff4b81c4f9 (diff) | |
download | barebox-51178d4979c9caeef95d616dcd3d47bdcd81a58e.tar.gz barebox-51178d4979c9caeef95d616dcd3d47bdcd81a58e.tar.xz |
fs: introduce unsetenv() to prepare for changing setenv(var, "") behavior
Currently, we treat setenv(var, "") and setenv(var, NULL) the same
and delete var, which is surprising and leads to subtle quirks:
- setenv(var, "") is specified by POSIX to set var to an empty string,
but barebox uses it to delete variables
- nv.user= calls nv_set with NULL parameter, but nv user="" doesn't
Make the API more POSIX-like by providing unsetenv with the expected
semantics. Most user code can then use unsetenv without worrying about
whether "" or NULL is the magic deletion value.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'commands')
-rw-r--r-- | commands/readlink.c | 2 | ||||
-rw-r--r-- | commands/setenv.c | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/commands/readlink.c b/commands/readlink.c index fdcf175f56..81ad25c733 100644 --- a/commands/readlink.c +++ b/commands/readlink.c @@ -50,7 +50,7 @@ static int do_readlink(int argc, char *argv[]) return 0; err: - setenv(argv[optind + 1], ""); + unsetenv(argv[optind + 1]); return 1; } diff --git a/commands/setenv.c b/commands/setenv.c index ad26770655..6992f604f5 100644 --- a/commands/setenv.c +++ b/commands/setenv.c @@ -10,6 +10,7 @@ static int do_setenv(int argc, char *argv[]) { char *equal; + int ret; if (argc < 2) return COMMAND_ERROR_USAGE; @@ -21,8 +22,12 @@ static int do_setenv(int argc, char *argv[]) argv[2] = &equal[1]; } + if (argv[2]) + ret = setenv(argv[1], argv[2]); + else + ret = unsetenv(argv[1]); - return setenv(argv[1], argv[2]) ? COMMAND_ERROR : COMMAND_SUCCESS; + return ret ? COMMAND_ERROR : COMMAND_SUCCESS; } BAREBOX_CMD_HELP_START(setenv) |