[PATCH 1/1] efi_selftest: ask before overwriting in dtbdump.efi
Heinrich Schuchardt
xypron.glpk at gmx.de
Sun Jan 17 05:15:18 CET 2021
Before overwriting an existing file ask the user.
Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
lib/efi_selftest/dtbdump.c | 59 +++++++++++++++++++++++++++++++++++++-
1 file changed, 58 insertions(+), 1 deletion(-)
diff --git a/lib/efi_selftest/dtbdump.c b/lib/efi_selftest/dtbdump.c
index efef759863..5bbfa3b265 100644
--- a/lib/efi_selftest/dtbdump.c
+++ b/lib/efi_selftest/dtbdump.c
@@ -41,7 +41,51 @@ static void error(u16 *string)
}
/**
- * input() - read string from console
+ * efi_input_yn() - get answer to yes/no question
+ *
+ * Return:
+ * y or Y
+ * EFI_SUCCESS
+ * n or N
+ * EFI_ACCESS_DENIED
+ * ESC
+ * EFI_ABORTED
+ */
+static efi_status_t efi_input_yn(void)
+{
+ struct efi_input_key key = {0};
+ efi_uintn_t index;
+ efi_status_t ret;
+
+ /* Drain the console input */
+ ret = cin->reset(cin, true);
+ for (;;) {
+ ret = bs->wait_for_event(1, &cin->wait_for_key, &index);
+ if (ret != EFI_SUCCESS)
+ continue;
+ ret = cin->read_key_stroke(cin, &key);
+ if (ret != EFI_SUCCESS)
+ continue;
+ switch (key.scan_code) {
+ case 0x17: /* Escape */
+ return EFI_ABORTED;
+ default:
+ break;
+ }
+ /* Convert to lower case */
+ switch (key.unicode_char | 0x20) {
+ case 'y':
+ return EFI_SUCCESS;
+ case 'n':
+ return EFI_ACCESS_DENIED;
+ default:
+ break;
+ }
+ }
+}
+
+/**
+ * efi_input() - read string from console
*
* @buffer: input buffer
* @buffer_size: buffer size
@@ -379,6 +423,19 @@ efi_status_t do_save(u16 *filename)
error(L"Failed to open volume\n");
return ret;
}
+ /* Check if file already exists */
+ ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
+ if (ret == EFI_SUCCESS) {
+ file->close(file);
+ cout->output_string(cout, L"Overwrite existing file (y/n)? ");
+ ret = efi_input_yn();
+ cout->output_string(cout, L"\n");
+ if (ret != EFI_SUCCESS) {
+ error(L"Aborted by user\n");
+ return ret;
+ }
+ }
+
/* Create file */
ret = root->open(root, &file, filename,
EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |
--
2.29.2
More information about the U-Boot
mailing list