]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellLevel2CommandsLib/Rm.c
ShellPkg: Follow spec to remove the last '\' char in return name of GetCurDir().
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Rm.c
index dbf980a60c30845791ed1da4be5140a1591250c7..0b23fba150815204e2180ac5e8ba9ca7ff4fee9e 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for attrib shell level 2 function.\r
 \r
-  Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -39,6 +40,7 @@ IsDirectoryEmpty (
 \r
   RetVal = TRUE;\r
   NoFile = FALSE;\r
+  FileInfo = NULL;\r
 \r
   for (FileHandleFindFirstFile(FileHandle, &FileInfo)\r
     ;  !NoFile\r
@@ -76,6 +78,7 @@ CascadeDelete(
   EFI_STATUS            Status;\r
   SHELL_PROMPT_RESPONSE *Resp;\r
   CHAR16                *TempName;\r
+  UINTN                 NewSize;\r
 \r
   Resp                  = NULL;\r
   ShellStatus           = SHELL_SUCCESS;\r
@@ -83,7 +86,7 @@ CascadeDelete(
   Status                = EFI_SUCCESS;\r
 \r
   if ((Node->Info->Attribute & EFI_FILE_READ_ONLY) == EFI_FILE_READ_ONLY) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DETELE_RO), gShellLevel2HiiHandle, Node->FullName);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DETELE_RO), gShellLevel2HiiHandle, L"rm", Node->FullName);  \r
     return (SHELL_ACCESS_DENIED);\r
   }\r
 \r
@@ -92,7 +95,6 @@ CascadeDelete(
       if (!Quiet) {\r
         Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_RM_LOG_DELETE_CONF), gShellLevel2HiiHandle, Node->FullName);\r
         Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp);\r
-        ASSERT_EFI_ERROR(Status);\r
         ASSERT(Resp != NULL);\r
         if (EFI_ERROR(Status) || *Resp != ShellPromptResponseYes) {\r
           SHELL_FREE_NON_NULL(Resp);\r
@@ -125,13 +127,14 @@ CascadeDelete(
           //\r
           // Update the node filename to have full path with file system identifier\r
           //\r
-          TempName = AllocateZeroPool(StrSize(Node->FullName) + StrSize(Node2->FullName));\r
+          NewSize = StrSize(Node->FullName) + StrSize(Node2->FullName);\r
+          TempName = AllocateZeroPool(NewSize);\r
           if (TempName == NULL) {\r
             ShellStatus = SHELL_OUT_OF_RESOURCES;\r
           } else {\r
-            StrCpy(TempName, Node->FullName);\r
+            StrCpyS(TempName, NewSize/sizeof(CHAR16), Node->FullName);\r
             TempName[StrStr(TempName, L":")+1-TempName] = CHAR_NULL;\r
-            StrCat(TempName, Node2->FullName);\r
+            StrCatS(TempName, NewSize/sizeof(CHAR16), Node2->FullName);\r
             FreePool((VOID*)Node2->FullName);\r
             Node2->FullName = TempName;\r
 \r
@@ -144,7 +147,7 @@ CascadeDelete(
         if (!EFI_ERROR(Node2->Status)) {\r
           ShellStatus = CascadeDelete(Node2, Quiet);\r
         } else if (ShellStatus == SHELL_SUCCESS) {\r
-          ShellStatus = Node2->Status;\r
+          ShellStatus = (SHELL_STATUS)(Node2->Status&(~0x80000000));\r
         }\r
         if (ShellStatus != SHELL_SUCCESS) {\r
           if (List!=NULL) {\r
@@ -163,7 +166,9 @@ CascadeDelete(
     //\r
     // now delete the current node...\r
     //\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE), gShellLevel2HiiHandle, Node->FullName);\r
+    if (!Quiet) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE), gShellLevel2HiiHandle, Node->FullName);\r
+    }\r
     Status = gEfiShellProtocol->DeleteFile(Node->Handle);\r
     Node->Handle = NULL;\r
   }\r
@@ -175,13 +180,15 @@ CascadeDelete(
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE_ERR), gShellLevel2HiiHandle, Status);\r
     return (SHELL_ACCESS_DENIED);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE_COMP), gShellLevel2HiiHandle);\r
+    if (!Quiet) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_RM_LOG_DELETE_COMP), gShellLevel2HiiHandle);\r
+    }\r
     return (SHELL_SUCCESS);\r
   }\r
 }\r
 \r
 /**\r
-  Determins if a Node is a valid delete target.  Will prevent deleting the root directory.\r
+  Determines if a Node is a valid delete target.  Will prevent deleting the root directory.\r
 \r
   @param[in] List       RESERVED.  Not used.\r
   @param[in] Node       The node to analyze.\r
@@ -224,7 +231,9 @@ IsValidDeleteTarget(
   Pattern       = NULL;\r
   SearchString  = NULL;\r
   Size          = 0;\r
-  Pattern       = StrnCatGrow(&Pattern     , NULL, TempLocation  , 0);\r
+  Pattern       = StrnCatGrow(&Pattern, &Size, TempLocation  , 0);\r
+  Pattern       = StrnCatGrow(&Pattern, &Size, L"\\"  , 0);\r
+  Size = 0;\r
   SearchString  = StrnCatGrow(&SearchString, &Size, Node->FullName, 0);\r
   if (!EFI_ERROR(ShellIsDirectory(SearchString))) {\r
     SearchString  = StrnCatGrow(&SearchString, &Size, L"\\", 0);\r
@@ -285,7 +294,7 @@ ShellCommandRunRm (
   Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
   if (EFI_ERROR(Status)) {\r
     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, ProblemParam);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"rm", ProblemParam);  \r
       FreePool(ProblemParam);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
@@ -302,7 +311,7 @@ ShellCommandRunRm (
       //\r
       // we insufficient parameters\r
       //\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel2HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel2HiiHandle, L"rm");  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       //\r
@@ -315,7 +324,7 @@ ShellCommandRunRm (
          ){\r
         Status = ShellOpenFileMetaArg((CHAR16*)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList);\r
         if (EFI_ERROR(Status) || FileList == NULL || IsListEmpty(&FileList->Link)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_NF), gShellLevel2HiiHandle, (CHAR16*)Param);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_NF), gShellLevel2HiiHandle, L"rm", (CHAR16*)Param);  \r
           ShellStatus = SHELL_NOT_FOUND;\r
           break;\r
         }\r