]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c
ShellPkg/[hex]edit: use SimpleTextInEx to read console
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / EfiCompress.c
index fdde8d1809587acb272ea717b2651c4534f198fa..d94acf4e4b1acc5087610e9018b51b844870455f 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for EfiCompress shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2005 - 2016, 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
@@ -35,13 +36,14 @@ ShellCommandRunEfiCompress (
   SHELL_FILE_HANDLE   InShellFileHandle;\r
   SHELL_FILE_HANDLE   OutShellFileHandle;\r
   UINT64              OutSize;\r
-  UINT64              OutSize2;\r
+  UINT              OutSize2;\r
   VOID                *OutBuffer;\r
   UINT64              InSize;\r
-  UINT64              InSize2;\r
+  UINT              InSize2;\r
   VOID                *InBuffer;\r
   CHAR16              *InFileName;\r
   CONST CHAR16        *OutFileName;\r
+  CONST CHAR16        *TempParam;\r
 \r
   InFileName          = NULL;\r
   OutFileName         = NULL;\r
@@ -68,7 +70,7 @@ ShellCommandRunEfiCompress (
   Status = ShellCommandLineParse (EmptyParamList, &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), gShellDebug1HiiHandle, ProblemParam);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"eficompress", ProblemParam);  \r
       FreePool(ProblemParam);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
@@ -76,35 +78,37 @@ ShellCommandRunEfiCompress (
     }\r
   } else {\r
     if (ShellCommandLineGetCount(Package) > 3) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"eficompress");  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else if (ShellCommandLineGetCount(Package) < 3) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"eficompress");  \r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
+      TempParam = ShellCommandLineGetRawValue(Package, 1);\r
+      ASSERT(TempParam != NULL);\r
+      InFileName = ShellFindFilePath(TempParam);\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
       if (InFileName == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"eficompress", TempParam);  \r
         ShellStatus = SHELL_NOT_FOUND;\r
       } else {\r
         if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", InFileName);  \r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
         if (ShellIsDirectory(OutFileName) == EFI_SUCCESS){\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", OutFileName);  \r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
         if (ShellStatus == SHELL_SUCCESS) {\r
           Status = ShellOpenFileByName(InFileName, &InShellFileHandle, EFI_FILE_MODE_READ, 0);\r
           if (EFI_ERROR(Status)) {\r
-            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue(Package, 1));  \r
             ShellStatus = SHELL_NOT_FOUND;\r
           }\r
           Status = ShellOpenFileByName(OutFileName, &OutShellFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
           if (EFI_ERROR(Status)) {\r
-            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue(Package, 2));  \r
             ShellStatus = SHELL_NOT_FOUND;\r
           }\r
         }\r
@@ -112,24 +116,31 @@ ShellCommandRunEfiCompress (
           Status = gEfiShellProtocol->GetFileSize(InShellFileHandle, &InSize);\r
           ASSERT_EFI_ERROR(Status);\r
           InBuffer = AllocateZeroPool((UINTN)InSize);\r
-          ASSERT(InBuffer != NULL);\r
-          InSize2 = (UINTN)InSize;\r
-          Status = gEfiShellProtocol->ReadFile(InShellFileHandle, &InSize2, InBuffer);\r
-          ASSERT_EFI_ERROR(Status);\r
-          Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
-          if (Status == EFI_BUFFER_TOO_SMALL) {\r
-            OutBuffer = AllocateZeroPool((UINTN)OutSize);\r
-            ASSERT(OutBuffer != NULL);\r
-            Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
+          if (InBuffer == NULL) {\r
+            Status = EFI_OUT_OF_RESOURCES;\r
+          } else {\r
+            InSize2 = (UINTN) InSize;\r
+            Status = gEfiShellProtocol->ReadFile (InShellFileHandle, &InSize2, InBuffer);\r
+            InSize = InSize2;\r
+            ASSERT_EFI_ERROR (Status);\r
+            Status = Compress (InBuffer, InSize, OutBuffer, &OutSize);\r
+            if (Status == EFI_BUFFER_TOO_SMALL) {\r
+              OutBuffer = AllocateZeroPool ((UINTN) OutSize);\r
+              if (OutBuffer == NULL) {\r
+                Status = EFI_OUT_OF_RESOURCES;\r
+              } else {\r
+                Status = Compress (InBuffer, InSize, OutBuffer, &OutSize);\r
+              }\r
+            }\r
           }\r
           if (EFI_ERROR(Status)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
-            ShellStatus = SHELL_DEVICE_ERROR;\r
+            ShellStatus = ((Status == EFI_OUT_OF_RESOURCES) ? SHELL_OUT_OF_RESOURCES : SHELL_DEVICE_ERROR);\r
           } else {\r
             OutSize2 = (UINTN)OutSize;\r
             Status = gEfiShellProtocol->WriteFile(OutShellFileHandle, &OutSize2, OutBuffer);\r
             if (EFI_ERROR(Status)) {\r
-              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, L"eficompress", OutFileName);  \r
               ShellStatus = SHELL_DEVICE_ERROR;\r
             }\r
           }\r