\r
On the remaining device path, the longest initial sequence of\r
FILEPATH_DEVICE_PATH nodes is node-wise traversed with\r
- EFI_FILE_PROTOCOL.Open(). For the pathname fragment specified by each\r
- traversed FILEPATH_DEVICE_PATH node, EfiOpenFileByDevicePath() first masks\r
- EFI_FILE_MODE_CREATE out of OpenMode, and passes 0 for Attributes. If\r
- EFI_FILE_PROTOCOL.Open() fails, and OpenMode includes EFI_FILE_MODE_CREATE,\r
- then the operation is retried with the caller's OpenMode and Attributes\r
- unmodified.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
(As a consequence, if OpenMode includes EFI_FILE_MODE_CREATE, and Attributes\r
includes EFI_FILE_DIRECTORY, and each FILEPATH_DEVICE_PATH specifies a single\r
the last node in FilePath.\r
\r
@param[in] OpenMode The OpenMode parameter to pass to\r
- EFI_FILE_PROTOCOL.Open(). For each\r
- FILEPATH_DEVICE_PATH node in FilePath,\r
- EfiOpenFileByDevicePath() first opens the specified\r
- pathname fragment with EFI_FILE_MODE_CREATE masked\r
- out of OpenMode and with Attributes set to 0, and\r
- only retries the operation with EFI_FILE_MODE_CREATE\r
- unmasked and Attributes propagated if the first open\r
- attempt fails.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
@param[in] Attributes The Attributes parameter to pass to\r
- EFI_FILE_PROTOCOL.Open(), when EFI_FILE_MODE_CREATE\r
- is propagated unmasked in OpenMode.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
@retval EFI_SUCCESS The file or directory has been opened or\r
created.\r
\r
On the remaining device path, the longest initial sequence of\r
FILEPATH_DEVICE_PATH nodes is node-wise traversed with\r
- EFI_FILE_PROTOCOL.Open(). For the pathname fragment specified by each\r
- traversed FILEPATH_DEVICE_PATH node, EfiOpenFileByDevicePath() first masks\r
- EFI_FILE_MODE_CREATE out of OpenMode, and passes 0 for Attributes. If\r
- EFI_FILE_PROTOCOL.Open() fails, and OpenMode includes EFI_FILE_MODE_CREATE,\r
- then the operation is retried with the caller's OpenMode and Attributes\r
- unmodified.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
(As a consequence, if OpenMode includes EFI_FILE_MODE_CREATE, and Attributes\r
includes EFI_FILE_DIRECTORY, and each FILEPATH_DEVICE_PATH specifies a single\r
the last node in FilePath.\r
\r
@param[in] OpenMode The OpenMode parameter to pass to\r
- EFI_FILE_PROTOCOL.Open(). For each\r
- FILEPATH_DEVICE_PATH node in FilePath,\r
- EfiOpenFileByDevicePath() first opens the specified\r
- pathname fragment with EFI_FILE_MODE_CREATE masked\r
- out of OpenMode and with Attributes set to 0, and\r
- only retries the operation with EFI_FILE_MODE_CREATE\r
- unmasked and Attributes propagated if the first open\r
- attempt fails.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
@param[in] Attributes The Attributes parameter to pass to\r
- EFI_FILE_PROTOCOL.Open(), when EFI_FILE_MODE_CREATE\r
- is propagated unmasked in OpenMode.\r
+ EFI_FILE_PROTOCOL.Open().\r
\r
@retval EFI_SUCCESS The file or directory has been opened or\r
created.\r
}\r
\r
//\r
- // Open the next pathname fragment with EFI_FILE_MODE_CREATE masked out and\r
- // with Attributes set to 0.\r
+ // Open or create the file corresponding to the next pathname fragment.\r
//\r
Status = LastFile->Open (\r
LastFile,\r
&NextFile,\r
PathName,\r
- OpenMode & ~(UINT64)EFI_FILE_MODE_CREATE,\r
- 0\r
+ OpenMode,\r
+ Attributes\r
);\r
\r
- //\r
- // Retry with EFI_FILE_MODE_CREATE and the original Attributes if the first\r
- // attempt failed, and the caller specified EFI_FILE_MODE_CREATE.\r
- //\r
- if (EFI_ERROR (Status) && (OpenMode & EFI_FILE_MODE_CREATE) != 0) {\r
- Status = LastFile->Open (\r
- LastFile,\r
- &NextFile,\r
- PathName,\r
- OpenMode,\r
- Attributes\r
- );\r
- }\r
-\r
//\r
// Release any AlignedPathName on both error and success paths; PathName is\r
// no longer needed.\r