)\r
{\r
CONST CHAR16 *TempLocation;\r
- CHAR16 *Temp2;\r
+ BOOLEAN RetVal;\r
+ CHAR16 *SearchString;\r
+ CHAR16 *Pattern;\r
UINTN Size;\r
\r
+ if (Node == NULL || Node->FullName == NULL) {\r
+ return (FALSE);\r
+ }\r
+\r
TempLocation = StrStr(Node->FullName, L":");\r
- if (StrLen(TempLocation) == 2) {\r
+ if (StrLen(TempLocation) <= 2) {\r
//\r
// Deleting the root directory is invalid.\r
//\r
return (FALSE);\r
}\r
+\r
TempLocation = ShellGetCurrentDir(NULL);\r
- Size = 0;\r
- Temp2 = NULL;\r
- StrnCatGrow(&Temp2, &Size, TempLocation, 0);\r
- if (StrStr(Temp2, Node->FullName) != NULL) {\r
- FreePool(Temp2);\r
- return (FALSE);\r
+ if (TempLocation == NULL) {\r
+ //\r
+ // No working directory is specified so whatever is left is ok.\r
+ //\r
+ return (TRUE);\r
}\r
- FreePool(Temp2);\r
\r
- return (TRUE);\r
+ Pattern = NULL;\r
+ SearchString = NULL;\r
+ Size = 0;\r
+ Pattern = StrnCatGrow(&Pattern , NULL, TempLocation , 0);\r
+ SearchString = StrnCatGrow(&SearchString, &Size, Node->FullName, 0);\r
+ SearchString = StrnCatGrow(&SearchString, &Size, L"*", 0);\r
+\r
+ if (Pattern == NULL || SearchString == NULL) {\r
+ RetVal = FALSE;\r
+ } else {\r
+ RetVal = TRUE;\r
+ if (gUnicodeCollation->MetaiMatch(gUnicodeCollation, Pattern, SearchString)) {\r
+ RetVal = FALSE;\r
+ }\r
+ }\r
+\r
+ SHELL_FREE_NON_NULL(Pattern );\r
+ SHELL_FREE_NON_NULL(SearchString);\r
+\r
+ return (RetVal);\r
}\r
\r
/**\r