]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/posix-environ: Variables from kernel command line
authorSimon Kuenzer <simon@unikraft.io>
Fri, 24 Feb 2023 00:45:52 +0000 (01:45 +0100)
committerUnikraft <monkey@unikraft.io>
Sun, 7 May 2023 16:44:41 +0000 (16:44 +0000)
Introduces the ability to populate additional environment variables via the
kernel command line.

Checkpatch-Ignore: SPACING
Signed-off-by: Simon Kuenzer <simon@unikraft.io>
Reviewed-by: Delia Pavel <delia_maria.pavel@stud.acs.upb.ro>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #868

lib/posix-environ/Config.uk
lib/posix-environ/Makefile.uk
lib/posix-environ/environ.c

index 9073afdd339e2bb98690e6ac1bd0b70b3d3c41d0..a1ab2af666ff1d7b4c223c3d0ef68d7bb8f1dc13 100644 (file)
@@ -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
index 9e36517fa0332fb3b12e8d84ff5267b108754758..6128e24766d13085f2a26db1659f3d76c2efedd4 100644 (file)
@@ -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
index d555683bba742968d64d5d802e8c16aa0398707e..4a76acdeb82fb0211865d3ea32e4a46a8643afdc 100644 (file)
@@ -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 <uk/libparam.h>
 #include <uk/essentials.h>
 #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;