- Status = ShellCreateDirectory(NewDirName, &FileHandle);\r
- if (FileHandle != NULL) {\r
- gEfiShellProtocol->CloseFile(FileHandle);\r
+ NewDirNameCopy = AllocateCopyPool (StrSize(NewDirName), NewDirName);\r
+ NewDirNameCopy = PathCleanUpDirectories (NewDirNameCopy);\r
+ if(NewDirNameCopy == NULL) {\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ break;\r
+ }\r
+ SplitName = NewDirNameCopy;\r
+ while (SplitName != NULL) {\r
+ SplitName = StrStr (SplitName + 1, L"\\");\r
+ if (SplitName != NULL) {\r
+ SaveSplitChar = *(SplitName + 1);\r
+ *(SplitName + 1) = '\0';\r
+ }\r
+ //\r
+ // check if current nested directory already exists... continue to create the child directory.\r
+ //\r
+ Status = ShellOpenFileByName (NewDirNameCopy,\r
+ &FileHandle,\r
+ EFI_FILE_MODE_READ,\r
+ EFI_FILE_DIRECTORY\r
+ );\r
+ if (!EFI_ERROR(Status)) {\r
+ ShellCloseFile (&FileHandle);\r
+ } else {\r
+ Status = ShellCreateDirectory (NewDirNameCopy, &FileHandle);\r
+ if (EFI_ERROR(Status)) {\r
+ break;\r
+ }\r
+ if (FileHandle != NULL) {\r
+ gEfiShellProtocol->CloseFile (FileHandle);\r
+ }\r
+ }\r
+ if (SplitName != NULL) {\r
+ *(SplitName + 1) = SaveSplitChar;\r
+ }\r