- NewFile->Signature = FVFS_FILE_SIGNATURE;\r
- NewFile->Instance = Instance;\r
- NewFile->FvFileInfo = FvFileInfo;\r
- CopyMem (&NewFile->FileProtocol, &mFileSystemTemplate, sizeof (mFileSystemTemplate));\r
- InitializeListHead (&NewFile->Link);\r
- InsertHeadList (&Instance->FileHead, &NewFile->Link);\r
+ // If the file has not been found check if the filename exists with an extension\r
+ // in case there was no extension present.\r
+ // FvFileSystem adds a 'virtual' extension '.EFI' to EFI applications and drivers\r
+ // present in the Firmware Volume\r
+ if (Status == EFI_NOT_FOUND) {\r
+ FileNameLength = StrLen (FileName);\r
+\r
+ // Does the filename already contain the '.EFI' extension?\r
+ if (mUnicodeCollation->StriColl (mUnicodeCollation, FileName + FileNameLength - 4, L".efi") != 0) {\r
+ // No, there was no extension. So add one and search again for the file\r
+ // NewFileNameLength = FileNameLength + 1 + 4 = (Number of non-null character) + (file extension) + (a null character)\r
+ NewFileNameLength = FileNameLength + 1 + 4;\r
+ FileNameWithExtension = AllocatePool (NewFileNameLength * 2);\r
+ StrCpyS (FileNameWithExtension, NewFileNameLength, FileName);\r
+ StrCatS (FileNameWithExtension, NewFileNameLength, L".EFI");\r
+\r
+ for (FvFileInfoLink = GetFirstNode (&Instance->FileInfoHead);\r
+ !IsNull (&Instance->FileInfoHead, FvFileInfoLink);\r
+ FvFileInfoLink = GetNextNode (&Instance->FileInfoHead, FvFileInfoLink)) {\r
+ FvFileInfo = FVFS_FILE_INFO_FROM_LINK (FvFileInfoLink);\r
+ if (mUnicodeCollation->StriColl (mUnicodeCollation, &FvFileInfo->FileInfo.FileName[0], FileNameWithExtension) == 0) {\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r