|
@@ -301,67 +301,58 @@ Decompress (
|
|
|
//
|
|
|
switch (CompressionType) {
|
|
|
case EFI_STANDARD_COMPRESSION:
|
|
|
- if (TRUE) {
|
|
|
- //
|
|
|
- // Load EFI standard compression.
|
|
|
- // For compressed data, decompress them to destination buffer.
|
|
|
- //
|
|
|
- Status = UefiDecompressGetInfo (
|
|
|
- CompressionSource,
|
|
|
- CompressionSourceSize,
|
|
|
- &DstBufferSize,
|
|
|
- &ScratchBufferSize
|
|
|
- );
|
|
|
- if (EFI_ERROR (Status)) {
|
|
|
- //
|
|
|
- // GetInfo failed
|
|
|
- //
|
|
|
- DEBUG ((DEBUG_ERROR, "Decompress GetInfo Failed - %r\n", Status));
|
|
|
- return EFI_NOT_FOUND;
|
|
|
- }
|
|
|
- //
|
|
|
- // Allocate scratch buffer
|
|
|
- //
|
|
|
- ScratchBuffer = AllocatePages (EFI_SIZE_TO_PAGES (ScratchBufferSize));
|
|
|
- if (ScratchBuffer == NULL) {
|
|
|
- return EFI_OUT_OF_RESOURCES;
|
|
|
- }
|
|
|
- //
|
|
|
- // Allocate destination buffer, extra one page for adjustment
|
|
|
- //
|
|
|
- DstBuffer = AllocatePages (EFI_SIZE_TO_PAGES (DstBufferSize) + 1);
|
|
|
- if (DstBuffer == NULL) {
|
|
|
- return EFI_OUT_OF_RESOURCES;
|
|
|
- }
|
|
|
- //
|
|
|
- // DstBuffer still is one section. Adjust DstBuffer offset, skip EFI section header
|
|
|
- // to make section data at page alignment.
|
|
|
- //
|
|
|
- DstBuffer = DstBuffer + EFI_PAGE_SIZE - sizeof (EFI_COMMON_SECTION_HEADER);
|
|
|
+ //
|
|
|
+ // Load EFI standard compression.
|
|
|
+ // For compressed data, decompress them to destination buffer.
|
|
|
+ //
|
|
|
+ Status = UefiDecompressGetInfo (
|
|
|
+ CompressionSource,
|
|
|
+ CompressionSourceSize,
|
|
|
+ &DstBufferSize,
|
|
|
+ &ScratchBufferSize
|
|
|
+ );
|
|
|
+ if (EFI_ERROR (Status)) {
|
|
|
//
|
|
|
- // Call decompress function
|
|
|
+ // GetInfo failed
|
|
|
//
|
|
|
- Status = UefiDecompress (
|
|
|
- CompressionSource,
|
|
|
- DstBuffer,
|
|
|
- ScratchBuffer
|
|
|
- );
|
|
|
- if (EFI_ERROR (Status)) {
|
|
|
- //
|
|
|
- // Decompress failed
|
|
|
- //
|
|
|
- DEBUG ((DEBUG_ERROR, "Decompress Failed - %r\n", Status));
|
|
|
- return EFI_NOT_FOUND;
|
|
|
- }
|
|
|
- break;
|
|
|
- } else {
|
|
|
+ DEBUG ((DEBUG_ERROR, "Decompress GetInfo Failed - %r\n", Status));
|
|
|
+ return EFI_NOT_FOUND;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // Allocate scratch buffer
|
|
|
+ //
|
|
|
+ ScratchBuffer = AllocatePages (EFI_SIZE_TO_PAGES (ScratchBufferSize));
|
|
|
+ if (ScratchBuffer == NULL) {
|
|
|
+ return EFI_OUT_OF_RESOURCES;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // Allocate destination buffer, extra one page for adjustment
|
|
|
+ //
|
|
|
+ DstBuffer = AllocatePages (EFI_SIZE_TO_PAGES (DstBufferSize) + 1);
|
|
|
+ if (DstBuffer == NULL) {
|
|
|
+ return EFI_OUT_OF_RESOURCES;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ // DstBuffer still is one section. Adjust DstBuffer offset, skip EFI section header
|
|
|
+ // to make section data at page alignment.
|
|
|
+ //
|
|
|
+ DstBuffer = DstBuffer + EFI_PAGE_SIZE - sizeof (EFI_COMMON_SECTION_HEADER);
|
|
|
+ //
|
|
|
+ // Call decompress function
|
|
|
+ //
|
|
|
+ Status = UefiDecompress (
|
|
|
+ CompressionSource,
|
|
|
+ DstBuffer,
|
|
|
+ ScratchBuffer
|
|
|
+ );
|
|
|
+ if (EFI_ERROR (Status)) {
|
|
|
//
|
|
|
- // PcdDxeIplSupportUefiDecompress is FALSE
|
|
|
- // Don't support UEFI decompression algorithm.
|
|
|
+ // Decompress failed
|
|
|
//
|
|
|
- ASSERT (FALSE);
|
|
|
+ DEBUG ((DEBUG_ERROR, "Decompress Failed - %r\n", Status));
|
|
|
return EFI_NOT_FOUND;
|
|
|
}
|
|
|
+ break;
|
|
|
|
|
|
case EFI_NOT_COMPRESSED:
|
|
|
//
|