mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	2. Removed the unnecessary library and include path from MSA files git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@541 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			166 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
 | 
						|
This software and associated documentation (if any) is furnished
 | 
						|
under a license and may only be used or copied in accordance
 | 
						|
with the terms of the license. Except as permitted by such
 | 
						|
license, no part of this software or documentation may be
 | 
						|
reproduced, stored in a retrieval system, or transmitted in any
 | 
						|
form or by any means without the express written consent of
 | 
						|
Intel Corporation.
 | 
						|
 | 
						|
 | 
						|
Module Name:
 | 
						|
  
 | 
						|
  EfiCompressMain.c
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
  The main function for the compression utility.
 | 
						|
  
 | 
						|
--*/
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
#include <ctype.h>
 | 
						|
#include <stdarg.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#include <Common/UefiBaseTypes.h>
 | 
						|
 | 
						|
#include "EfiCompress.h"
 | 
						|
 | 
						|
int
 | 
						|
main (
 | 
						|
  INT32 argc,
 | 
						|
  CHAR8 *argv[]
 | 
						|
  )
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
 | 
						|
  Compresses the input files
 | 
						|
 | 
						|
Arguments:
 | 
						|
 | 
						|
  argc   - number of arguments passed into the command line.
 | 
						|
  argv[] - files to compress and files to output compressed data to.
 | 
						|
 | 
						|
Returns:
 | 
						|
 | 
						|
  int: 0 for successful execution of the function.
 | 
						|
 | 
						|
--*/
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
  FILE        *infile;
 | 
						|
  FILE        *outfile;
 | 
						|
  UINT32      SrcSize;
 | 
						|
  UINT32      DstSize;
 | 
						|
  UINT8       *SrcBuffer;
 | 
						|
  UINT8       *DstBuffer;
 | 
						|
  UINT8       Buffer[8];
 | 
						|
 | 
						|
  //
 | 
						|
  //  Added for makefile debug - KCE
 | 
						|
  //
 | 
						|
  INT32       arg_counter;
 | 
						|
  printf ("\n\n");
 | 
						|
  for (arg_counter = 0; arg_counter < argc; arg_counter++) {
 | 
						|
    printf ("%s ", argv[arg_counter]);
 | 
						|
  }
 | 
						|
 | 
						|
  printf ("\n\n");
 | 
						|
 | 
						|
  SrcBuffer             = DstBuffer = NULL;
 | 
						|
 | 
						|
  infile                = outfile = NULL;
 | 
						|
 | 
						|
  if (argc != 3) {
 | 
						|
    printf ("Usage: EFICOMPRESS <infile> <outfile>\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
 | 
						|
  if ((outfile = fopen (argv[2], "wb")) == NULL) {
 | 
						|
    printf ("Can't open output file\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
 | 
						|
  if ((infile = fopen (argv[1], "rb")) == NULL) {
 | 
						|
    printf ("Can't open input file\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Get the size of source file
 | 
						|
  //
 | 
						|
  SrcSize = 0;
 | 
						|
  while (fread (Buffer, 1, 1, infile)) {
 | 
						|
    SrcSize++;
 | 
						|
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Read in the source data
 | 
						|
  //
 | 
						|
  if ((SrcBuffer = malloc (SrcSize)) == NULL) {
 | 
						|
    printf ("Can't allocate memory\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
 | 
						|
  rewind (infile);
 | 
						|
  if (fread (SrcBuffer, 1, SrcSize, infile) != SrcSize) {
 | 
						|
    printf ("Can't read from source\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Get destination data size and do the compression
 | 
						|
  //
 | 
						|
  DstSize = 0;
 | 
						|
  Status  = Compress (SrcBuffer, SrcSize, DstBuffer, &DstSize);
 | 
						|
  if (Status == EFI_BUFFER_TOO_SMALL) {
 | 
						|
    if ((DstBuffer = malloc (DstSize)) == NULL) {
 | 
						|
      printf ("Can't allocate memory\n");
 | 
						|
      goto Done;
 | 
						|
    }
 | 
						|
 | 
						|
    Status = Compress (SrcBuffer, SrcSize, DstBuffer, &DstSize);
 | 
						|
  }
 | 
						|
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    printf ("Compress Error\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
 | 
						|
  printf ("\nOrig Size = %ld\n", SrcSize);
 | 
						|
  printf ("Comp Size = %ld\n", DstSize);
 | 
						|
 | 
						|
  if (DstBuffer == NULL) {
 | 
						|
    printf ("No destination to write to.\n");
 | 
						|
    goto Done;
 | 
						|
  }
 | 
						|
  //
 | 
						|
  // Write out the result
 | 
						|
  //
 | 
						|
  if (fwrite (DstBuffer, 1, DstSize, outfile) != DstSize) {
 | 
						|
    printf ("Can't write to destination file\n");
 | 
						|
  }
 | 
						|
 | 
						|
Done:
 | 
						|
  if (SrcBuffer) {
 | 
						|
    free (SrcBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  if (DstBuffer) {
 | 
						|
    free (DstBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  if (infile) {
 | 
						|
    fclose (infile);
 | 
						|
  }
 | 
						|
 | 
						|
  if (outfile) {
 | 
						|
    fclose (outfile);
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 |