diff options
| author | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2016-09-21 20:29:42 -0400 |
|---|---|---|
| committer | Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com> | 2016-09-21 20:29:42 -0400 |
| commit | 62f0afa2ecead02b1258dabab8097ca278a22f8f (patch) | |
| tree | 56132d617fff7c4f05e67024ec872d88fcafa92d /fallback.c | |
| parent | d3819813b8e0a64400ddf3ce033bae7c3f245508 (diff) | |
| download | efi-boot-shim-62f0afa2ecead02b1258dabab8097ca278a22f8f.tar.gz efi-boot-shim-62f0afa2ecead02b1258dabab8097ca278a22f8f.zip | |
Import upstream version 0.9+1474479173.6c180c6
Diffstat (limited to 'fallback.c')
| -rw-r--r-- | fallback.c | 50 |
1 files changed, 34 insertions, 16 deletions
@@ -579,6 +579,8 @@ find_boot_csv(EFI_FILE_HANDLE fh, CHAR16 *dirname) FreePool(buffer); buffer = NULL; + CHAR16 *bootcsv=NULL, *bootarchcsv=NULL; + bs = 0; do { bs = 0; @@ -608,27 +610,43 @@ find_boot_csv(EFI_FILE_HANDLE fh, CHAR16 *dirname) fi = buffer; - if (!StrCaseCmp(fi->FileName, L"boot.csv")) { - EFI_FILE_HANDLE fh2; - rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2, - fi->FileName, - EFI_FILE_READ_ONLY, 0); - if (EFI_ERROR(rc) || fh2 == NULL) { - Print(L"Couldn't open \\EFI\\%s\\%s: %d\n", - dirname, fi->FileName, rc); - FreePool(buffer); - buffer = NULL; - continue; - } - rc = try_boot_csv(fh2, dirname, fi->FileName); - uefi_call_wrapper(fh2->Close, 1, fh2); - } + if (!bootcsv && !StrCaseCmp(fi->FileName, L"boot.csv")) + bootcsv = StrDuplicate(fi->FileName); + + if (!bootarchcsv && + !StrCaseCmp(fi->FileName, L"boot" EFI_ARCH L".csv")) + bootarchcsv = StrDuplicate(fi->FileName); FreePool(buffer); buffer = NULL; } while (bs != 0); rc = EFI_SUCCESS; + if (bootarchcsv) { + EFI_FILE_HANDLE fh2; + rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2, + bootarchcsv, EFI_FILE_READ_ONLY, 0); + if (EFI_ERROR(rc) || fh2 == NULL) { + Print(L"Couldn't open \\EFI\\%s\\%s: %d\n", + dirname, bootarchcsv, rc); + } else { + rc = try_boot_csv(fh2, dirname, bootarchcsv); + uefi_call_wrapper(fh2->Close, 1, fh2); + } + } + if ((EFI_ERROR(rc) || !bootarchcsv) && bootcsv) { + EFI_FILE_HANDLE fh2; + rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2, + bootcsv, EFI_FILE_READ_ONLY, 0); + if (EFI_ERROR(rc) || fh2 == NULL) { + Print(L"Couldn't open \\EFI\\%s\\%s: %d\n", + dirname, bootcsv, rc); + } else { + rc = try_boot_csv(fh2, dirname, bootcsv); + uefi_call_wrapper(fh2->Close, 1, fh2); + } + } + rc = EFI_SUCCESS; return rc; } @@ -817,7 +835,7 @@ debug_hook(void) x = 1; Print(L"add-symbol-file "DEBUGDIR - L"fallback.debug %p -s .data %p\n", &_etext, + L"fb" EFI_ARCH L".efi.debug %p -s .data %p\n", &_etext, &_edata); } |
