projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '2019-10-28-azure-ci-support'
[oweals/u-boot.git]
/
cmd
/
nvedit_efi.c
diff --git
a/cmd/nvedit_efi.c
b/cmd/nvedit_efi.c
index e65b38dbf399b9fbb22969de561b3abb2d215d04..ede4cd5235ea822de6d6bb2aea13185b9b506eac 100644
(file)
--- a/
cmd/nvedit_efi.c
+++ b/
cmd/nvedit_efi.c
@@
-9,6
+9,7
@@
#include <common.h>
#include <command.h>
#include <efi_loader.h>
#include <common.h>
#include <command.h>
#include <efi_loader.h>
+#include <env.h>
#include <exports.h>
#include <hexdump.h>
#include <malloc.h>
#include <exports.h>
#include <hexdump.h>
#include <malloc.h>
@@
-291,8
+292,11
@@
static int append_value(char **bufp, size_t *sizep, char *data)
if (!tmp_buf)
return -1;
if (!tmp_buf)
return -1;
- if (hex2bin((u8 *)tmp_buf, data, len) < 0)
+ if (hex2bin((u8 *)tmp_buf, data, len) < 0) {
+ printf("Error: illegal hexadecimal string\n");
+ free(tmp_buf);
return -1;
return -1;
+ }
value = tmp_buf;
} else { /* string */
value = tmp_buf;
} else { /* string */
@@
-326,7
+330,7
@@
out:
}
/**
}
/**
- * do_env_
prin
t_efi() - set UEFI variable
+ * do_env_
se
t_efi() - set UEFI variable
*
* @cmdtp: Command table
* @flag: Command flag
*
* @cmdtp: Command table
* @flag: Command flag
@@
-346,6
+350,7
@@
int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
u16 *var_name16 = NULL, *p;
size_t len;
efi_guid_t guid;
u16 *var_name16 = NULL, *p;
size_t len;
efi_guid_t guid;
+ u32 attributes;
efi_status_t ret;
if (argc == 1)
efi_status_t ret;
if (argc == 1)
@@
-359,6
+364,16
@@
int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return CMD_RET_FAILURE;
}
return CMD_RET_FAILURE;
}
+ attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS;
+ if (!strcmp(argv[1], "-nv")) {
+ attributes |= EFI_VARIABLE_NON_VOLATILE;
+ argc--;
+ argv++;
+ if (argc == 1)
+ return CMD_RET_SUCCESS;
+ }
+
var_name = argv[1];
if (argc == 2) {
/* delete */
var_name = argv[1];
if (argc == 2) {
/* delete */
@@
-370,6
+385,8
@@
int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
for ( ; argc > 0; argc--, argv++)
if (append_value(&value, &size, argv[0]) < 0) {
for ( ; argc > 0; argc--, argv++)
if (append_value(&value, &size, argv[0]) < 0) {
+ printf("## Failed to process an argument, %s\n",
+ argv[0]);
ret = CMD_RET_FAILURE;
goto out;
}
ret = CMD_RET_FAILURE;
goto out;
}
@@
-378,6
+395,7
@@
int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
len = utf8_utf16_strnlen(var_name, strlen(var_name));
var_name16 = malloc((len + 1) * 2);
if (!var_name16) {
len = utf8_utf16_strnlen(var_name, strlen(var_name));
var_name16 = malloc((len + 1) * 2);
if (!var_name16) {
+ printf("## Out of memory\n");
ret = CMD_RET_FAILURE;
goto out;
}
ret = CMD_RET_FAILURE;
goto out;
}
@@
-385,11
+403,14
@@
int do_env_set_efi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
utf8_utf16_strncpy(&p, var_name, len + 1);
guid = efi_global_variable_guid;
utf8_utf16_strncpy(&p, var_name, len + 1);
guid = efi_global_variable_guid;
- ret = EFI_CALL(efi_set_variable(var_name16, &guid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS |
- EFI_VARIABLE_RUNTIME_ACCESS,
+ ret = EFI_CALL(efi_set_variable(var_name16, &guid, attributes,
size, value));
size, value));
- ret = (ret == EFI_SUCCESS ? CMD_RET_SUCCESS : CMD_RET_FAILURE);
+ if (ret == EFI_SUCCESS) {
+ ret = CMD_RET_SUCCESS;
+ } else {
+ printf("## Failed to set EFI variable\n");
+ ret = CMD_RET_FAILURE;
+ }
out:
free(value);
free(var_name16);
out:
free(value);
free(var_name16);