TempString = StrnCatGrow(&TempString, &Size, BasePath, 0);\r
if (TempString == NULL) {\r
FreePool((VOID*)ShellFileListItem->FileName);\r
- FreePool(ShellFileListItem->Info);\r
+ SHELL_FREE_NON_NULL(ShellFileListItem->Info);\r
FreePool(ShellFileListItem);\r
return (NULL);\r
}\r
EFI_SHELL_FILE_INFO *ShellInfo;\r
EFI_SHELL_FILE_INFO *ShellInfoNode;\r
EFI_SHELL_FILE_INFO *NewShellNode;\r
+ EFI_FILE_INFO *FileInfo;\r
BOOLEAN Directory;\r
CHAR16 *NewFullName;\r
UINTN Size;\r
\r
if (CurrentFilePattern[0] == CHAR_NULL\r
&&NextFilePatternStart[0] == CHAR_NULL\r
- ){\r
+ ){\r
//\r
- // Add the current parameter FileHandle to the list, then end...\r
+ // we want the parent or root node (if no parent)\r
//\r
if (ParentNode == NULL) {\r
- Status = EFI_INVALID_PARAMETER;\r
+ //\r
+ // We want the root node. create the node.\r
+ //\r
+ FileInfo = FileHandleGetInfo(FileHandle);\r
+ NewShellNode = CreateAndPopulateShellFileInfo(\r
+ L":",\r
+ EFI_SUCCESS,\r
+ L"\\",\r
+ FileHandle,\r
+ FileInfo\r
+ );\r
+ SHELL_FREE_NON_NULL(FileInfo);\r
} else {\r
+ //\r
+ // Add the current parameter FileHandle to the list, then end...\r
+ //\r
NewShellNode = InternalDuplicateShellFileInfo((EFI_SHELL_FILE_INFO*)ParentNode, TRUE);\r
- if (NewShellNode == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
- } else {\r
- NewShellNode->Handle = NULL;\r
- if (*FileList == NULL) {\r
- *FileList = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));\r
- InitializeListHead(&((*FileList)->Link));\r
- }\r
+ }\r
+ if (NewShellNode == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ } else {\r
+ NewShellNode->Handle = NULL;\r
+ if (*FileList == NULL) {\r
+ *FileList = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));\r
+ InitializeListHead(&((*FileList)->Link));\r
+ }\r
\r
- //\r
- // Add to the returning to use list\r
- //\r
- InsertTailList(&(*FileList)->Link, &NewShellNode->Link);\r
+ //\r
+ // Add to the returning to use list\r
+ //\r
+ InsertTailList(&(*FileList)->Link, &NewShellNode->Link);\r
\r
- Status = EFI_SUCCESS;\r
- }\r
+ Status = EFI_SUCCESS;\r
}\r
} else {\r
Status = EfiShellFindFilesInDir(FileHandle, &ShellInfo);\r