summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Moore <Robert.Moore@intel.com>2014-02-19 12:04:07 -0800
committerRobert Moore <Robert.Moore@intel.com>2014-02-19 12:04:07 -0800
commit99af4cd7d1bf5c67cbc6d00609071e0e62ac7e5d (patch)
tree47450723902576785ac9bd88b259fac2447da5e8
parent8c473dd159c15be0df00e9441f5dfdc8a1241276 (diff)
AcpiBin: General cleanup of open files and allocated buffers.
Fixed some dangling resources. with assistance from Dean Nelson. ACPICA BZ 1076.
-rw-r--r--source/tools/acpibin/abcompare.c139
1 files changed, 84 insertions, 55 deletions
diff --git a/source/tools/acpibin/abcompare.c b/source/tools/acpibin/abcompare.c
index 2d086fea6..b6afb4e77 100644
--- a/source/tools/acpibin/abcompare.c
+++ b/source/tools/acpibin/abcompare.c
@@ -117,8 +117,6 @@
#include "acapps.h"
-FILE *File1;
-FILE *File2;
ACPI_TABLE_HEADER Header1;
ACPI_TABLE_HEADER Header2;
@@ -214,7 +212,6 @@ AbHexByteToBinary (
*OutBinary = (UINT8) ((Local1 << 4) | Local2);
return (2);
-
}
@@ -259,23 +256,24 @@ AcpiTbSumTable (
void *Buffer,
UINT32 Length)
{
- const UINT8 *limit;
- const UINT8 *rover;
- UINT8 sum = 0;
+ const UINT8 *Limit;
+ const UINT8 *Rover;
+ UINT8 Sum = 0;
if (Buffer && Length)
{
/* Buffer and Length are valid */
- limit = (UINT8 *) Buffer + Length;
+ Limit = (UINT8 *) Buffer + Length;
- for (rover = Buffer; rover < limit; rover++)
+ for (Rover = Buffer; Rover < Limit; Rover++)
{
- sum = (UINT8) (sum + *rover);
+ Sum = (UINT8) (Sum + *Rover);
}
}
- return (sum);
+
+ return (Sum);
}
@@ -302,10 +300,10 @@ AbPrintHeaderInfo (
printf ("Length : %8.8X\n", Header->Length);
printf ("Revision : %2.2X\n", Header->Revision);
printf ("Checksum : %2.2X\n", Header->Checksum);
- printf ("OEM ID : %6.6s\n", Header->OemId);
- printf ("OEM Table ID : %8.8s\n", Header->OemTableId);
+ printf ("OEM ID : %.6s\n", Header->OemId);
+ printf ("OEM Table ID : %.8s\n", Header->OemTableId);
printf ("OEM Revision : %8.8X\n", Header->OemRevision);
- printf ("ASL Compiler ID : %4.4s\n", Header->AslCompilerId);
+ printf ("ASL Compiler ID : %.4s\n", Header->AslCompilerId);
printf ("Compiler Revision : %8.8X\n", Header->AslCompilerRevision);
printf ("\n");
}
@@ -322,10 +320,10 @@ AbPrintHeadersInfo (
printf ("Length %8.8X : %8.8X\n", Header->Length, Header2->Length);
printf ("Revision %8.2X : %2.2X\n", Header->Revision, Header2->Revision);
printf ("Checksum %8.2X : %2.2X\n", Header->Checksum, Header2->Checksum);
- printf ("OEM ID %8.6s : %6.6s\n", Header->OemId, Header2->OemId);
- printf ("OEM Table ID %8.8s : %8.8s\n", Header->OemTableId, Header2->OemTableId);
+ printf ("OEM ID %8.6s : %.6s\n", Header->OemId, Header2->OemId);
+ printf ("OEM Table ID %8.8s : %.8s\n", Header->OemTableId, Header2->OemTableId);
printf ("OEM Revision %8.8X : %8.8X\n", Header->OemRevision, Header2->OemRevision);
- printf ("ASL Compiler ID %8.4s : %4.4s\n", Header->AslCompilerId, Header2->AslCompilerId);
+ printf ("ASL Compiler ID %8.4s : %.4s\n", Header->AslCompilerId, Header2->AslCompilerId);
printf ("Compiler Revision %8.8X : %8.8X\n", Header->AslCompilerRevision, Header2->AslCompilerRevision);
printf ("\n");
}
@@ -341,22 +339,25 @@ AbPrintHeadersInfo (
void
AbDisplayHeader (
- char *File1Path)
+ char *FilePath)
{
UINT32 Actual;
+ FILE *File;
- File1 = fopen (File1Path, "rb");
- if (!File1)
+ File = fopen (FilePath, "rb");
+ if (!File)
{
- printf ("Could not open file %s\n", File1Path);
+ printf ("Could not open file %s\n", FilePath);
return;
}
- Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
+ fclose (File);
+
if (Actual != sizeof (ACPI_TABLE_HEADER))
{
- printf ("File %s does not contain an ACPI table header\n", File1Path);
+ printf ("File %s does not contain a valid ACPI table header\n", FilePath);
return;
}
@@ -379,30 +380,31 @@ AbDisplayHeader (
void
AbComputeChecksum (
- char *File1Path)
+ char *FilePath)
{
UINT32 Actual;
ACPI_TABLE_HEADER *Table;
UINT8 Checksum;
+ FILE *File;
- File1 = fopen (File1Path, "rb");
- if (!File1)
+ File = fopen (FilePath, "rb");
+ if (!File)
{
- printf ("Could not open file %s\n", File1Path);
+ printf ("Could not open file %s\n", FilePath);
return;
}
- Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fread (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
if (Actual < sizeof (ACPI_TABLE_HEADER))
{
- printf ("File %s does not contain an ACPI table header\n", File1Path);
- return;
+ printf ("File %s does not contain a valid ACPI table header\n", FilePath);
+ goto Exit1;
}
if (!AbValidateHeader (&Header1))
{
- return;
+ goto Exit1;
}
if (!Gbl_TerseMode)
@@ -415,18 +417,18 @@ AbComputeChecksum (
Table = AcpiOsAllocate (Header1.Length);
if (!Table)
{
- printf ("could not allocate\n");
- return;
+ printf ("Could not allocate buffer for table\n");
+ goto Exit1;
}
/* Read the entire table, including header */
- fseek (File1, 0, SEEK_SET);
- Actual = fread (Table, 1, Header1.Length, File1);
+ fseek (File, 0, SEEK_SET);
+ Actual = fread (Table, 1, Header1.Length, File);
if (Actual != Header1.Length)
{
- printf ("could not read table, length %u\n", Header1.Length);
- return;
+ printf ("Could not read table, length %u\n", Header1.Length);
+ goto Exit2;
}
/* Compute the checksum for the table */
@@ -438,32 +440,41 @@ AbComputeChecksum (
if (Header1.Checksum == Checksum)
{
- printf ("Checksum ok in AML file, not updating\n");
- return;
+ printf ("Checksum OK in AML file, not updating\n");
+ goto Exit2;
}
/* Open the target file for writing, to update checksum */
- fclose (File1);
- File1 = fopen (File1Path, "r+b");
- if (!File1)
+ fclose (File);
+ File = fopen (FilePath, "r+b");
+ if (!File)
{
- printf ("Could not open file %s for writing\n", File1Path);
- return;
+ printf ("Could not open file %s for writing\n", FilePath);
+ goto Exit2;
}
/* Set the checksum, write the new header */
Header1.Checksum = Checksum;
- Actual = fwrite (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File1);
+ Actual = fwrite (&Header1, 1, sizeof (ACPI_TABLE_HEADER), File);
if (Actual != sizeof (ACPI_TABLE_HEADER))
{
printf ("Could not write updated table header\n");
- return;
+ goto Exit2;
}
printf ("Wrote new checksum\n");
+
+Exit2:
+ AcpiOsFree (Table);
+
+Exit1:
+ if (File)
+ {
+ fclose (File);
+ }
return;
}
@@ -488,6 +499,9 @@ AbCompareAmlFiles (
UINT8 Char2;
UINT8 Mismatches = 0;
BOOLEAN HeaderMismatch = FALSE;
+ FILE *File1;
+ FILE *File2;
+ int Status = -1;
File1 = fopen (File1Path, "rb");
@@ -501,7 +515,7 @@ AbCompareAmlFiles (
if (!File2)
{
printf ("Could not open file %s\n", File2Path);
- return (-1);
+ goto Exit1;
}
/* Read the ACPI header from each file */
@@ -510,20 +524,20 @@ AbCompareAmlFiles (
if (Actual1 != sizeof (ACPI_TABLE_HEADER))
{
printf ("File %s does not contain an ACPI table header\n", File1Path);
- return (-1);
+ goto Exit2;
}
Actual2 = fread (&Header2, 1, sizeof (ACPI_TABLE_HEADER), File2);
if (Actual2 != sizeof (ACPI_TABLE_HEADER))
{
printf ("File %s does not contain an ACPI table header\n", File2Path);
- return (-1);
+ goto Exit2;
}
if ((!AbValidateHeader (&Header1)) ||
(!AbValidateHeader (&Header2)))
{
- return (-1);
+ goto Exit2;
}
/* Table signatures must match */
@@ -531,7 +545,7 @@ AbCompareAmlFiles (
if (*((UINT32 *) Header1.Signature) != *((UINT32 *) Header2.Signature))
{
printf ("Table signatures do not match\n");
- return (-1);
+ goto Exit2;
}
if (!Gbl_TerseMode)
@@ -563,7 +577,7 @@ AbCompareAmlFiles (
if (Mismatches > 100)
{
printf ("100 Mismatches: Too many mismatches\n");
- return (-1);
+ goto Exit2;
}
}
@@ -595,7 +609,14 @@ AbCompareAmlFiles (
}
printf ("%u Mismatches found\n", Mismatches);
- return (0);
+ Status = 0;
+
+Exit2:
+ fclose (File2);
+
+Exit1:
+ fclose (File1);
+ return (Status);
}
@@ -680,6 +701,7 @@ AbDumpAmlFile (
char *FileBuffer;
FILE *FileOutHandle;
UINT32 FileSize = 0;
+ int Status = -1;
/* Get the entire AML file, validate header */
@@ -697,12 +719,12 @@ AbDumpAmlFile (
if (!FileOutHandle)
{
printf ("Could not open file %s\n", File2Path);
- return (-1);
+ goto Exit1;
}
if (!AbValidateHeader ((ACPI_TABLE_HEADER *) FileBuffer))
{
- return (-1);
+ goto Exit2;
}
/* Convert binary AML to text, using common dump buffer routine */
@@ -721,7 +743,14 @@ AbDumpAmlFile (
printf ("Output file: %s contains %u (0x%X) bytes\n\n",
File2Path, FileSize, FileSize);
- return (0);
+ Status = 0;
+
+Exit2:
+ fclose (FileOutHandle);
+
+Exit1:
+ free (FileBuffer);
+ return (Status);
}