globalvar_get_match() concatenates all matching variables with the separator, whether they have a value or not. As variables like global.linux.bootargs.base or global.linux.bootargs.dyn.* are registered unconditionally, but often left empty, the resulting kernel command line would contain runs of multiple spaces.
Treat variables without a value as if they didn't exist at all. Assisted-by: Claude:fable-5 Signed-off-by: Ahmad Fatoum <[email protected]> --- Documentation/user/booting-linux.rst | 2 +- common/globalvar.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Documentation/user/booting-linux.rst b/Documentation/user/booting-linux.rst index 95834786b67a..fa5a355183eb 100644 --- a/Documentation/user/booting-linux.rst +++ b/Documentation/user/booting-linux.rst @@ -87,7 +87,7 @@ With ``CONFIG_FLEXIBLE_BOOTARGS`` enabled, the bootargs are composed from different :ref:`global device<global_device>` variables and the :ref:`bootargs <magicvar_bootargs>` environment variable is ignored. All variables beginning with ``global.linux.bootargs.`` will be concatenated -to the bootargs: +to the bootargs. Variables without a value are skipped: .. code-block:: sh diff --git a/common/globalvar.c b/common/globalvar.c index 876379b2538e..41f3e93b00e1 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -7,6 +7,7 @@ #include <init.h> #include <environment.h> #include <magicvar.h> +#include <string.h> #include <fs.h> #include <fcntl.h> #include <libfile.h> @@ -419,7 +420,8 @@ void globalvar_print(void) * globalvar_get_match * * get a concatenated string of all globalvars beginning with 'match'. - * This adds whitespaces between the different globalvars + * This adds the separator between the different globalvars. Variables + * without a value are skipped. */ char *globalvar_get_match(const char *match, const char *separator) { @@ -429,6 +431,8 @@ char *globalvar_get_match(const char *match, const char *separator) dev_for_each_param(&global_device, param) { if (!strncmp(match, param->name, strlen(match))) { const char *p = dev_get_param(&global_device, param->name); + if (isempty(p)) + continue; if (val) { char *new = basprintf("%s%s%s", val, separator, p); -- 2.47.3
