/*++\r
\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
Module Name:\r
- \r
+\r
ImageFile.c\r
\r
\r
Abstract:\r
\r
- \r
+\r
\r
\r
Revision History\r
IN BOOLEAN BootPolicy,\r
IN VOID *SourceBuffer OPTIONAL,\r
IN UINTN SourceSize,\r
- IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
+ IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,\r
OUT EFI_HANDLE *DeviceHandle,\r
IN IMAGE_FILE_HANDLE *ImageFileHandle,\r
OUT UINT32 *AuthenticationStatus\r
FilePath - The specific file path from which the image is loaded\r
DeviceHandle - Pointer to the return device handle.\r
ImageFileHandle - Pointer to the image file handle.\r
- AuthenticationStatus - Pointer to a caller-allocated UINT32 in which the authentication status is returned. \r
- \r
+ AuthenticationStatus - Pointer to a caller-allocated UINT32 in which the authentication status is returned.\r
+\r
Returns:\r
\r
EFI_SUCCESS - Image file successfully opened.\r
- \r
+\r
EFI_LOAD_ERROR - If the caller passed a copy of the file, and SourceSize is 0.\r
- \r
+\r
EFI_INVALID_PARAMETER - File path is not valid.\r
- \r
+\r
EFI_NOT_FOUND - File not found.\r
\r
--*/\r
ImageFileHandle->Source = SourceBuffer;\r
ImageFileHandle->SourceSize = SourceSize;\r
*DeviceHandle = NULL;\r
- CoreLocateDevicePath (&gEfiDevicePathProtocolGuid, &FilePath, DeviceHandle);\r
+ CoreLocateDevicePath (&gEfiDevicePathProtocolGuid, FilePath, DeviceHandle);\r
if (SourceSize > 0) {\r
Status = EFI_SUCCESS;\r
} else {\r
//\r
// Make sure FilePath is valid\r
//\r
- if (FilePath == NULL) {\r
+ if (*FilePath == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// Check to see if it's in a Firmware Volume\r
//\r
- FwVolFilePathNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)FilePath;\r
+ FwVolFilePathNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) *FilePath;\r
Status = CoreDevicePathToInterface (\r
- &gEfiFirmwareVolume2ProtocolGuid, \r
- (EFI_DEVICE_PATH_PROTOCOL **)&FwVolFilePathNode, \r
- (VOID*)&FwVol, \r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ (EFI_DEVICE_PATH_PROTOCOL **)&FwVolFilePathNode,\r
+ (VOID*)&FwVol,\r
DeviceHandle\r
);\r
if (!EFI_ERROR (Status)) {\r
SectionType = EFI_SECTION_PE32;\r
Pe32Buffer = NULL;\r
Status = FwVol->ReadSection (\r
- FwVol, \r
- NameGuid, \r
- SectionType, \r
+ FwVol,\r
+ NameGuid,\r
+ SectionType,\r
0,\r
(VOID **)&Pe32Buffer,\r
&Pe32BufferSize,\r
}\r
Pe32Buffer = NULL;\r
Status = FwVol->ReadFile (\r
- FwVol, \r
- NameGuid, \r
+ FwVol,\r
+ NameGuid,\r
(VOID **)&Pe32Buffer,\r
&Pe32BufferSize,\r
&Type,\r
AuthenticationStatus\r
);\r
}\r
- \r
+\r
if (!EFI_ERROR (Status)) {\r
//\r
// One of the reads passed so we are done\r
//\r
// Attempt to access the file via a file system interface\r
//\r
- FilePathNode = (FILEPATH_DEVICE_PATH *) FilePath;\r
+ FilePathNode = (FILEPATH_DEVICE_PATH *) *FilePath;\r
Status = CoreDevicePathToInterface (\r
- &gEfiSimpleFileSystemProtocolGuid, \r
- (EFI_DEVICE_PATH_PROTOCOL **)&FilePathNode, \r
- (VOID*)&Volume, \r
+ &gEfiSimpleFileSystemProtocolGuid,\r
+ (EFI_DEVICE_PATH_PROTOCOL **)&FilePathNode,\r
+ (VOID*)&Volume,\r
DeviceHandle\r
);\r
if (!EFI_ERROR (Status)) {\r
//\r
Status = Volume->OpenVolume (Volume, &FileHandle);\r
if (!EFI_ERROR (Status)) {\r
- \r
+\r
//\r
// Parse each MEDIA_FILEPATH_DP node. There may be more than one, since the\r
// directory information and filename can be seperate. The goal is to inch\r
FileHandle,\r
&gEfiFileInfoGuid,\r
&FileInfoSize,\r
- FileInfo \r
+ FileInfo\r
);\r
}\r
if (!EFI_ERROR (Status)) {\r
}\r
}\r
}\r
- } \r
+ }\r
\r
\r
//\r
// Try LoadFile style\r
//\r
\r
- TempFilePath = FilePath;\r
+ TempFilePath = *FilePath;\r
Status = CoreDevicePathToInterface (\r
&gEfiLoadFileProtocolGuid,\r
&TempFilePath,\r
Arguments:\r
\r
UserHandle - Image file handle\r
- \r
+\r
Offset - Offset to the source file\r
- \r
+\r
ReadSize - For input, pointer of size to read;\r
For output, pointer of size actually read.\r
- \r
+\r
Buffer - Buffer to write into\r
\r
Returns:\r
EndPosition = Offset + *ReadSize;\r
if (EndPosition > FHand->SourceSize) {\r
*ReadSize = (UINT32)(FHand->SourceSize - Offset);\r
- } \r
+ }\r
if (Offset >= FHand->SourceSize) {\r
*ReadSize = 0;\r
}\r
Arguments:\r
\r
Protocol - The protocol to search for\r
- \r
+\r
FilePath - The specified device path\r
- \r
+\r
Interface - Interface of the protocol on the handle\r
- \r
+\r
Handle - The handle to the device on the specified device path that supports the protocol.\r
- \r
+\r
Returns:\r
\r
Status code.\r
Routine Description:\r
\r
Helper function called as part of the code needed\r
- to allocate the proper sized buffer for various \r
+ to allocate the proper sized buffer for various\r
EFI interfaces.\r
\r
Arguments:\r
Buffer - Current allocated buffer, or NULL\r
\r
BufferSize - Current buffer size needed\r
- \r
+\r
Returns:\r
- \r
- TRUE - if the buffer was reallocated and the caller \r
+\r
+ TRUE - if the buffer was reallocated and the caller\r
should try the API again.\r
\r
FALSE - buffer could not be allocated and the caller\r
//\r
// If the status code is "buffer too small", resize the buffer\r
//\r
- \r
+\r
if (*Status == EFI_BUFFER_TOO_SMALL) {\r
if (*Buffer != NULL) {\r
CoreFreePool (*Buffer);\r
*Buffer = CoreAllocateBootServicesPool (BufferSize);\r
if (*Buffer != NULL) {\r
TryAgain = TRUE;\r
- } else { \r
+ } else {\r
*Status = EFI_OUT_OF_RESOURCES;\r
- } \r
+ }\r
}\r
\r
//\r