stand/boot1.efi: Allow modules to add env variables
Sometimes filesystem modules need to pass details of the state of the filesystem to later stages of a boot. Provide a generic method to do so. We'll add them after any env variables set in our config files. Sponsored by: Netflix Reviewed by: tsoome, kevans Differential Revision: https://reviews.freebsd.org/D39407
This commit is contained in:
parent
5f2e84015d
commit
91ac713b64
@ -96,6 +96,26 @@ try_boot(const boot_module_t *mod, dev_info_t *dev, void *loaderbuf, size_t load
|
|||||||
buf = NULL;
|
buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* See if there's any env variables the module wants to set. If so,
|
||||||
|
* append it to any config present.
|
||||||
|
*/
|
||||||
|
if (mod->extra_env != NULL) {
|
||||||
|
const char *env = mod->extra_env();
|
||||||
|
if (env != NULL) {
|
||||||
|
size_t newlen = cmdsize + strlen(env) + 1;
|
||||||
|
|
||||||
|
cmd = realloc(cmd, newlen);
|
||||||
|
if (cmd == NULL)
|
||||||
|
goto errout;
|
||||||
|
if (cmdsize > 0)
|
||||||
|
strlcat(cmd, " ", newlen);
|
||||||
|
strlcat(cmd, env, newlen);
|
||||||
|
cmdsize = strlen(cmd);
|
||||||
|
free(__DECONST(char *, env));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((status = BS->LoadImage(TRUE, IH, efi_devpath_last_node(dev->devpath),
|
if ((status = BS->LoadImage(TRUE, IH, efi_devpath_last_node(dev->devpath),
|
||||||
loaderbuf, loadersize, &loaderhandle)) != EFI_SUCCESS) {
|
loaderbuf, loadersize, &loaderhandle)) != EFI_SUCCESS) {
|
||||||
printf("Failed to load image provided by %s, size: %zu, (%lu)\n",
|
printf("Failed to load image provided by %s, size: %zu, (%lu)\n",
|
||||||
|
@ -94,6 +94,9 @@ typedef struct boot_module_t
|
|||||||
|
|
||||||
/* valid devices as found by probe. */
|
/* valid devices as found by probe. */
|
||||||
dev_info_t *(*devices)(void);
|
dev_info_t *(*devices)(void);
|
||||||
|
|
||||||
|
/* return any environment variables to pass to next stage */
|
||||||
|
const char *(*extra_env)(void);
|
||||||
} boot_module_t;
|
} boot_module_t;
|
||||||
|
|
||||||
extern const boot_module_t *boot_modules[];
|
extern const boot_module_t *boot_modules[];
|
||||||
|
Loading…
Reference in New Issue
Block a user