diff --git a/FatPkg/FatPei/FatLiteAccess.c b/FatPkg/FatPei/FatLiteAccess.c index 0a688a3185..53f5e3f60c 100644 --- a/FatPkg/FatPei/FatLiteAccess.c +++ b/FatPkg/FatPei/FatLiteAccess.c @@ -1,7 +1,7 @@ /** @file FAT file system access routines for FAT recovery PEIM -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -315,7 +315,10 @@ FatSetFilePos ( } File->CurrentPos += Pos; - + // + // Calculate the amount of consecutive cluster occupied by the file. + // FatReadFile() will use it to read these blocks once. + // File->StraightReadAmount = 0; Cluster = File->CurrentCluster; while (!FAT_CLUSTER_FUNCTIONAL (Cluster)) { @@ -517,9 +520,6 @@ FatReadNextDirectoryEntry ( SubFile->StartingCluster = SubFile->CurrentCluster; SubFile->Volume = ParentDir->Volume; - if (SubFile->StartingCluster != 0) { - Status = FatSetFilePos (PrivateData, SubFile, 0); - } // // in Pei phase, time parameters do not need to be filled for minimum use. // diff --git a/FatPkg/FatPei/FatLiteApi.c b/FatPkg/FatPei/FatLiteApi.c index bf8158d94f..46054be284 100644 --- a/FatPkg/FatPei/FatLiteApi.c +++ b/FatPkg/FatPei/FatLiteApi.c @@ -1,7 +1,7 @@ /** @file FAT recovery PEIM entry point, Ppi Functions and FAT Api functions. -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -577,6 +577,7 @@ FindRecoveryFile ( // // Construct root directory file // + ZeroMem (&Parent, sizeof (PEI_FAT_FILE)); Parent.IsFixedRootDir = (BOOLEAN) ((PrivateData->Volume[VolumeIndex].FatType == Fat32) ? FALSE : TRUE); Parent.Attributes = FAT_ATTR_DIRECTORY; Parent.CurrentPos = 0; @@ -593,6 +594,9 @@ FindRecoveryFile ( // Status = FatReadNextDirectoryEntry (PrivateData, &Parent, File); while (Status == EFI_SUCCESS) { + // + // Compare whether the file name is recovery file name. + // if (EngStriColl (PrivateData, FileName, File->FileName)) { break; } @@ -604,6 +608,13 @@ FindRecoveryFile ( return EFI_NOT_FOUND; } + // + // Get the recovery file, set its file position to 0. + // + if (File->StartingCluster != 0) { + Status = FatSetFilePos (PrivateData, File, 0); + } + *Handle = File; return EFI_SUCCESS;