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
|
||||
main(int argc, CHAR16 *argv[])
|
||||
{
|
||||
char vendor[128];
|
||||
char var[128];
|
||||
EFI_LOADED_IMAGE *img;
|
||||
EFI_GUID *guid;
|
||||
int i;
|
||||
int i, j, vargood;
|
||||
|
||||
/*
|
||||
* XXX Chicken-and-egg problem; we want to have console output
|
||||
@ -77,6 +77,29 @@ main(int argc, CHAR16 *argv[])
|
||||
*/
|
||||
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()) {
|
||||
printf("failed to allocate staging area\n");
|
||||
return (EFI_BUFFER_TOO_SMALL);
|
||||
|
Loading…
Reference in New Issue
Block a user