Set env vars from values on the efi loader command line.
Examine each cmdline arg and if it contains an '=' convert it to ascii and pass it to putenv(). This allows var=value settings to come in on the command line. This will allow overriding dhcp server-provided data in loader(8), as discussed in PR 202098 PR: 202098 Differential Revision: https://reviews.freebsd.org/D4561
This commit is contained in:
parent
703db8ccae
commit
21fddb1173
@ -64,10 +64,10 @@ EFI_GUID fdtdtb = FDT_TABLE_GUID;
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
main(int argc, CHAR16 *argv[])
|
main(int argc, CHAR16 *argv[])
|
||||||
{
|
{
|
||||||
char vendor[128];
|
char var[128];
|
||||||
EFI_LOADED_IMAGE *img;
|
EFI_LOADED_IMAGE *img;
|
||||||
EFI_GUID *guid;
|
EFI_GUID *guid;
|
||||||
int i;
|
int i, j, vargood;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX Chicken-and-egg problem; we want to have console output
|
* XXX Chicken-and-egg problem; we want to have console output
|
||||||
@ -77,6 +77,29 @@ main(int argc, CHAR16 *argv[])
|
|||||||
*/
|
*/
|
||||||
cons_probe();
|
cons_probe();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Loop through the args, and for each one that contains an '=' that is
|
||||||
|
* not the first character, add it to the environment. This allows
|
||||||
|
* loader and kernel env vars to be passed on the command line. Convert
|
||||||
|
* args from UCS-2 to ASCII (16 to 8 bit) as they are copied.
|
||||||
|
*/
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
vargood = 0;
|
||||||
|
for (j = 0; argv[i][j] != 0; j++) {
|
||||||
|
if (j == sizeof(var)) {
|
||||||
|
vargood = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (j > 0 && argv[i][j] == '=')
|
||||||
|
vargood = 1;
|
||||||
|
var[j] = (char)argv[i][j];
|
||||||
|
}
|
||||||
|
if (vargood) {
|
||||||
|
var[j] = 0;
|
||||||
|
putenv(var);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (efi_copy_init()) {
|
if (efi_copy_init()) {
|
||||||
printf("failed to allocate staging area\n");
|
printf("failed to allocate staging area\n");
|
||||||
return (EFI_BUFFER_TOO_SMALL);
|
return (EFI_BUFFER_TOO_SMALL);
|
||||||
|
Loading…
Reference in New Issue
Block a user