]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c
correct last commit. fix build break for some compilers.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / EfiCompress.c
index 8d5aabdafcc061411aa5afc76d7054fdf7d4a3d5..3dbf68e5a9f94ee9825d353b899cede22480597c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for EfiCompress shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
 #include "UefiShellDebug1CommandsLib.h"\r
 #include "Compress.h"\r
 \r
+/**\r
+  Function for 'compress' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunEfiCompress (\r
@@ -29,8 +35,10 @@ ShellCommandRunEfiCompress (
   SHELL_FILE_HANDLE   InShellFileHandle;\r
   SHELL_FILE_HANDLE   OutShellFileHandle;\r
   UINT64              OutSize;\r
+  UINTN               OutSize2;\r
   VOID                *OutBuffer;\r
   UINT64              InSize;\r
+  UINTN               InSize2;\r
   VOID                *InBuffer;\r
   CHAR16              *InFileName;\r
   CONST CHAR16        *OutFileName;\r
@@ -76,65 +84,70 @@ ShellCommandRunEfiCompress (
     } else {\r
       InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\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
-        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
+      if (InFileName == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
         ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      if (FileHandleIsDirectory(InShellFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      if (FileHandleIsDirectory(OutShellFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      Status = gEfiShellProtocol->GetFileSize(InShellFileHandle, &InSize);\r
-      ASSERT_EFI_ERROR(Status);\r
-      InBuffer = AllocateZeroPool((UINTN)InSize);\r
-      ASSERT(InBuffer != NULL);\r
-      Status = gEfiShellProtocol->ReadFile(InShellFileHandle, &((UINTN)InSize), 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
-      }\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
-        ShellStatus = SHELL_DEVICE_ERROR;\r
       } else {\r
-        Status = gEfiShellProtocol->WriteFile(OutShellFileHandle, &((UINTN)OutSize), OutBuffer);\r
-        if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
-          ShellStatus = SHELL_DEVICE_ERROR;\r
+        if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, 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
+          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
+            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
+            ShellStatus = SHELL_NOT_FOUND;\r
+          }\r
+        }\r
+        if (ShellStatus == SHELL_SUCCESS) {\r
+          Status = gEfiShellProtocol->GetFileSize(InShellFileHandle, &InSize);\r
+          ASSERT_EFI_ERROR(Status);\r
+          InBuffer = AllocateZeroPool((UINTN)InSize);\r
+          ASSERT(InBuffer != NULL);\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
+            ASSERT(OutBuffer != NULL);\r
+            Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\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
+          } 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
+              ShellStatus = SHELL_DEVICE_ERROR;\r
+            }\r
+          }\r
         }\r
       }\r
     }\r
 \r
     ShellCommandLineFreeVarList (Package);\r
   }\r
-  if (InFileName != NULL) {\r
-    FreePool(InFileName);\r
-  }\r
   if (InShellFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(InShellFileHandle);\r
   }\r
   if (OutShellFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(OutShellFileHandle);\r
   }\r
-  if (InBuffer != NULL) {\r
-    FreePool(InBuffer);\r
-  }\r
-  if (OutBuffer != NULL) {\r
-    FreePool(OutBuffer);\r
-  }\r
+  SHELL_FREE_NON_NULL(InFileName);\r
+  SHELL_FREE_NON_NULL(InBuffer);\r
+  SHELL_FREE_NON_NULL(OutBuffer);\r
 \r
   return (ShellStatus);\r
 }\r