EFI_FILE_PROTOCOL *Handle1;\r
EFI_FILE_PROTOCOL *Handle2;\r
EFI_HANDLE DeviceHandle;\r
+ CHAR16 *PathName;\r
+ UINTN PathLength;\r
\r
if ((FilePath == NULL || FileHandle == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
//\r
Handle2 = Handle1;\r
Handle1 = NULL;\r
+ PathLength = DevicePathNodeLength (*FilePath) - sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
+ PathName = AllocateCopyPool (PathLength, ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName);\r
+ if (PathName == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
\r
//\r
// Try to test opening an existing file\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
- ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
+ PathName,\r
OpenMode &~EFI_FILE_MODE_CREATE,\r
0\r
);\r
Status = Handle2->Open (\r
Handle2,\r
&Handle1,\r
- ((FILEPATH_DEVICE_PATH*)*FilePath)->PathName,\r
+ PathName,\r
OpenMode,\r
Attributes\r
);\r
//\r
Handle2->Close (Handle2);\r
\r
+ FreePool (PathName);\r
+\r
if (EFI_ERROR(Status)) {\r
return (Status);\r
}\r