EFI_LBA Index;\r
UINTN LbaSize;\r
UINTN ScratchLbaSizeData;\r
+ EFI_STATUS Status;\r
\r
//\r
// First LBA\r
//\r
- FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+ Status = FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
\r
//\r
// Use the scratch space as the intermediate buffer to transfer data\r
// write the data back to the first block\r
//\r
if (ScratchLbaSizeData > 0) {\r
- FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
+ Status = FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
//\r
// Middle LBAs\r
// Last LBAs, the same as first LBAs\r
//\r
if (LastLba > StartLba) {\r
- FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+ Status = FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
FvbReadBlock (Instance, LastLba, 0, &LbaSize, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
FvbEraseBlock (Instance, LastLba, Global, Virtual);\r
}\r
\r
- ScratchLbaSizeData = LbaSize - (OffsetStartLba + 1);\r
+ ScratchLbaSizeData = LbaSize - (OffsetLastLba + 1);\r
+ \r
+ if (ScratchLbaSizeData > 0) {\r
+ Status = FvbWriteBlock (\r
+ Instance,\r
+ LastLba,\r
+ (OffsetLastLba + 1),\r
+ &ScratchLbaSizeData,\r
+ Global->FvbScratchSpace[Virtual] + OffsetLastLba + 1,\r
+ Global,\r
+ Virtual\r
+ );\r
+ }\r
\r
- return FvbWriteBlock (\r
- Instance,\r
- LastLba,\r
- (OffsetLastLba + 1),\r
- &ScratchLbaSizeData,\r
- Global->FvbScratchSpace[Virtual],\r
- Global,\r
- Virtual\r
- );\r
+ return Status;\r
}\r
\r
EFI_STATUS\r