From: Simon Kuenzer Date: Fri, 24 Feb 2023 00:45:52 +0000 (+0100) Subject: lib/posix-environ: Variables from kernel command line X-Git-Tag: RELEASE-0.13.0~53 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=fefaa0591880d69770a869cbc06f85b38872dc61;p=unikraft%2Funikraft.git lib/posix-environ: Variables from kernel command line Introduces the ability to populate additional environment variables via the kernel command line. Checkpatch-Ignore: SPACING Signed-off-by: Simon Kuenzer Reviewed-by: Delia Pavel Approved-by: Razvan Deaconescu Tested-by: Unikraft CI GitHub-Closes: #868 --- diff --git a/lib/posix-environ/Config.uk b/lib/posix-environ/Config.uk index 9073afdd3..a1ab2af66 100644 --- a/lib/posix-environ/Config.uk +++ b/lib/posix-environ/Config.uk @@ -104,4 +104,17 @@ if LIBPOSIX_ENVIRON bool default y if LIBPOSIX_ENVIRON_ENVP15 != "" endmenu + + config LIBPOSIX_ENVIRON_LIBPARAM + bool "Parse kernel command line arguments" + default n + select LIBUKLIBPARAM + + config LIBPOSIX_ENVIRON_LIBPARAM_MAXCOUNT + int "Additional reserved entries for vars from command line" + default 8 + depends on LIBPOSIX_ENVIRON_LIBPARAM + help + This number defines the maximum number of variables that + can be handed over with the kernel command line. endif diff --git a/lib/posix-environ/Makefile.uk b/lib/posix-environ/Makefile.uk index 9e36517fa..6128e2476 100644 --- a/lib/posix-environ/Makefile.uk +++ b/lib/posix-environ/Makefile.uk @@ -1,4 +1,6 @@ $(eval $(call addlib_s,libposix_environ,$(CONFIG_LIBPOSIX_ENVIRON))) +# Register to uklibparam, sets "env" as parameter prefix (env.*) +$(eval $(call uk_libparam_libprefix_set,libposix_environ,env)) LIBPOSIX_ENVIRON_SRCS-y += $(LIBPOSIX_ENVIRON_BASE)/setenv.c LIBPOSIX_ENVIRON_SRCS-y += $(LIBPOSIX_ENVIRON_BASE)/unsetenv.c diff --git a/lib/posix-environ/environ.c b/lib/posix-environ/environ.c index d555683bb..4a76acdeb 100644 --- a/lib/posix-environ/environ.c +++ b/lib/posix-environ/environ.c @@ -3,10 +3,66 @@ * Licensed under the BSD-3-Clause License (the "License"). * You may not use this file except in compliance with the License. */ +#include #include #include "environ.h" -static char *__ct_env[] = { +/* + * Size the array + */ +static char *__init_env[1 /* null termination */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP0_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP0_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP1_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP1_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP2_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP2_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP3_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP3_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP4_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP4_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP5_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP5_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP6_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP6_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP7_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP7_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP8_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP8_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP9_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP9_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP10_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP10_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP11_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP11_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP12_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP12_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP13_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP13_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP14_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP14_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_ENVP15_NOTEMPTY + + 1 +#endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP15_NOTEMPTY */ +#if CONFIG_LIBPOSIX_ENVIRON_LIBPARAM + + CONFIG_LIBPOSIX_ENVIRON_LIBPARAM_MAXCOUNT +#endif /* CONFIG_LIBPOSIX_ENVIRON_LIBPARAM */ + ] = { #if CONFIG_LIBPOSIX_ENVIRON_ENVP0_NOTEMPTY CONFIG_LIBPOSIX_ENVIRON_ENVP0, #endif /* CONFIG_LIBPOSIX_ENVIRON_ENVP0_NOTEMPTY */ @@ -58,4 +114,13 @@ static char *__ct_env[] = { NULL /* termination */ }; -char **__environ = __ct_env; +#if CONFIG_LIBPOSIX_ENVIRON_LIBPARAM +UK_LIBPARAM_PARAM_ARR_ALIAS(vars, + &(__init_env[ARRAY_SIZE(__init_env) - + CONFIG_LIBPOSIX_ENVIRON_LIBPARAM_MAXCOUNT - 1]), + charp, + CONFIG_LIBPOSIX_ENVIRON_LIBPARAM_MAXCOUNT, + "Environment variables"); +#endif + +char **__environ = __init_env;