53 EFI_STATUS status = uefi_call_wrapper(volume->Open, 5, volume, &efiFile, path, EFI_FILE_MODE_READ,
54 EFI_FILE_READ_ONLY | EFI_FILE_HIDDEN | EFI_FILE_SYSTEM);
55 if (EFI_ERROR(status))
63 uefi_call_wrapper(efiFile->Close, 1, efiFile);
69 for (
size_t i = 0; i <
MAX_NAME - 1 && path[i] !=
'\0'; i++)
76 EFI_FILE_INFO* fileInfo = LibFileInfo(efiFile);
80 uefi_call_wrapper(efiFile->Close, 1, efiFile);
84 file->size = fileInfo->FileSize;
89 file->data = AllocatePool(
file->size);
93 uefi_call_wrapper(efiFile->Close, 1, efiFile);
97 status = uefi_call_wrapper(efiFile->Read, 3, efiFile, &
file->size,
file->data);
98 if (EFI_ERROR(status))
101 uefi_call_wrapper(efiFile->Close, 1, efiFile);
106 uefi_call_wrapper(efiFile->Close, 1, efiFile);
125 for (
size_t i = 0; i <
MAX_NAME - 1 && name[i] !=
'\0'; i++)
127 dir->
name[i] = (char)name[i];
134 EFI_FILE_INFO* fileInfo;
135 UINTN fileInfoSize = 0;
137 EFI_STATUS status = uefi_call_wrapper(volume->Read, 3, volume, &fileInfoSize,
NULL);
138 if (status != EFI_BUFFER_TOO_SMALL)
143 fileInfo = AllocatePool(fileInfoSize);
144 if (fileInfo ==
NULL)
150 status = uefi_call_wrapper(volume->Read, 3, volume, &fileInfoSize, fileInfo);
151 if (EFI_ERROR(status))
158 if (fileInfo->Attribute & EFI_FILE_DIRECTORY)
160 if (StrCmp(fileInfo->FileName, L
".") != 0 && StrCmp(fileInfo->FileName, L
"..") != 0)
162 EFI_FILE* childVolume;
163 status = uefi_call_wrapper(volume->Open, 5, volume, &childVolume, fileInfo->FileName,
164 EFI_FILE_MODE_READ, EFI_FILE_READ_ONLY | EFI_FILE_HIDDEN | EFI_FILE_SYSTEM);
165 if (EFI_ERROR(status))
173 uefi_call_wrapper(childVolume->Close, 1, childVolume);
A entry in a doubly linked list.