hashtable: do not recreate whole hash table if vars are passed to himport_r
authorQuentin Schulz <quentin.schulz@bootlin.com>
Mon, 9 Jul 2018 17:16:28 +0000 (19:16 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 20 Jul 2018 19:55:09 +0000 (15:55 -0400)
commitd9fc9077eb7eb5b793e5cbfb3364f15754fbb562
tree5160fbbe375fd6c3dbb4c592bfd5094859bfc047
parentf4eef40b01331696d780e9e782106e369c55df10
hashtable: do not recreate whole hash table if vars are passed to himport_r

When vars are passed to the himport_r function with H_NOCLEAR flag,
those vars will be overridden in the current environment and if one of
those vars is not in the imported environment, it'll be deleted in the
current environment whatever the flag passed to himport_r.

The H_NOCLEAR flag is used to clear the whole environment whether vars
are passed to the function or not.

This leads to incoherent behaviour. If one passes vars to himport_r
with the H_NOCLEAR flag, if a var in vars is not in the imported env,
that var will be removed from the current env.

If one passes vars to himport_r without the H_NOCLEAR flag, the whole
environment will be removed and vars will be imported from the
environment in RAM.

It makes more sense to keep the variable that is in the current
environment but not in the imported environment if the H_NOCLEAR flag is
set and remove only that variable if the H_NOCLEAR flag is not set.

Let's clear the whole environment only if H_NOCLEAR and vars are not
passed to himport_r.

Let's remove variables that are in the current environment but not in
the imported env only if the H_NOCLEAR flag is not passed.

Suggested-by: Wolfgang Denk <wd@denx.de>
Signed-off-by: Quentin Schulz <quentin.schulz@bootlin.com>
lib/hashtable.c