mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
committed by
Zbigniew Jędrzejewski-Szmek
parent
e07a80476b
commit
ed3abbfbde
@@ -1577,7 +1577,7 @@ static void config_load_entries(
|
||||
_cleanup_freepool_ CHAR8 *content = NULL;
|
||||
|
||||
err = readdir_harder(entries_dir, &f, &f_size);
|
||||
if (f_size == 0 || EFI_ERROR(err))
|
||||
if (EFI_ERROR(err) || !f)
|
||||
break;
|
||||
|
||||
if (f->FileName[0] == '.')
|
||||
@@ -2019,7 +2019,7 @@ static void config_entry_add_linux(
|
||||
CHAR8 *key, *value;
|
||||
|
||||
err = readdir_harder(linux_dir, &f, &f_size);
|
||||
if (f_size == 0 || EFI_ERROR(err))
|
||||
if (EFI_ERROR(err) || !f)
|
||||
break;
|
||||
|
||||
if (f->FileName[0] == '.')
|
||||
|
||||
@@ -592,7 +592,12 @@ EFI_STATUS readdir_harder(
|
||||
* the specified buffer needs to be freed by caller, after final use. */
|
||||
|
||||
if (!*buffer) {
|
||||
sz = offsetof(EFI_FILE_INFO, FileName) /* + 256 */;
|
||||
/* Some broken firmware violates the EFI spec by still advancing the readdir
|
||||
* position when returning EFI_BUFFER_TOO_SMALL, effectively skipping over any files when
|
||||
* the buffer was too small. Therefore, start with a buffer that should handle FAT32 max
|
||||
* file name length.
|
||||
* As a side effect, most readdir_harder() calls will now be slightly faster. */
|
||||
sz = sizeof(EFI_FILE_INFO) + 256 * sizeof(CHAR16);
|
||||
*buffer = xallocate_pool(sz);
|
||||
*buffer_size = sz;
|
||||
} else
|
||||
|
||||
Reference in New Issue
Block a user