diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2015-12-18 18:35:46 +0000 | 
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2015-12-18 18:35:46 +0000 | 
| commit | 1c6f3e7bf6ed0a9ff1bd466e319cdf456e6e91dc (patch) | |
| tree | 9ffecbf2e9ce4e63aac5515363a488b761a02b03 /source/compiler/aslstartup.c | |
| parent | b9098066cd6284319bca922f13e59517f774a103 (diff) | |
Notes
Diffstat (limited to 'source/compiler/aslstartup.c')
| -rw-r--r-- | source/compiler/aslstartup.c | 81 | 
1 files changed, 41 insertions, 40 deletions
diff --git a/source/compiler/aslstartup.c b/source/compiler/aslstartup.c index c04ae9c12f6a..017b4f899382 100644 --- a/source/compiler/aslstartup.c +++ b/source/compiler/aslstartup.c @@ -144,62 +144,63 @@ AslDetectSourceFileType (      ASL_FILE_INFO           *Info)  {      char                    *FileChar; -    UINT8                   Type; +    UINT8                   Type = ASL_INPUT_TYPE_ASCII_DATA; /* default */      ACPI_STATUS             Status; -    /* Check for a valid binary ACPI table */ +    /* Check for 100% ASCII source file (comments are ignored) */ -    Status = FlCheckForAcpiTable (Info->Handle); +    Status = FlIsFileAsciiSource (Info->Filename, FALSE);      if (ACPI_SUCCESS (Status))      { -        Type = ASL_INPUT_TYPE_ACPI_TABLE; -        goto Cleanup; -    } +        /* +         * File contains ASCII source code. Determine if this is an ASL +         * file or an ACPI data table file. +         */ +        while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle)) +        { +            /* Uppercase the buffer for caseless compare */ -    /* Check for 100% ASCII source file (comments are ignored) */ +            FileChar = Gbl_CurrentLineBuffer; +            while (*FileChar) +            { +                *FileChar = (char) toupper ((int) *FileChar); +                FileChar++; +            } -    Status = FlCheckForAscii (Info->Filename, TRUE); -    if (ACPI_FAILURE (Status)) -    { -        printf ("Invalid characters in input file - %s\n", Info->Filename); +            /* Presence of "DefinitionBlock" indicates actual ASL code */ -        if (!Gbl_IgnoreErrors) -        { -            Type = ASL_INPUT_TYPE_BINARY; -            goto Cleanup; +            if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) +            { +                /* Appears to be an ASL file */ + +                Type = ASL_INPUT_TYPE_ASCII_ASL; +                goto Cleanup; +            }          } -    } -    /* -     * File is ASCII. Determine if this is an ASL file or an ACPI data -     * table file. -     */ -    while (fgets (Gbl_CurrentLineBuffer, Gbl_LineBufferSize, Info->Handle)) -    { -        /* Uppercase the buffer for caseless compare */ +        /* Appears to be an ASCII data table source file */ -        FileChar = Gbl_CurrentLineBuffer; -        while (*FileChar) -        { -            *FileChar = (char) toupper ((int) *FileChar); -            FileChar++; -        } +        Type = ASL_INPUT_TYPE_ASCII_DATA; +        goto Cleanup; +    } -        /* Presence of "DefinitionBlock" indicates actual ASL code */ +    /* We have some sort of binary table, check for valid ACPI table */ -        if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) -        { -            /* Appears to be an ASL file */ +    fseek (Info->Handle, 0, SEEK_SET); -            Type = ASL_INPUT_TYPE_ASCII_ASL; -            goto Cleanup; -        } +    Status = AcValidateTableHeader (Info->Handle, 0); +    if (ACPI_SUCCESS (Status)) +    { +        fprintf (stderr, +            "Binary file appears to be a valid ACPI table, disassembling\n"); + +        Type = ASL_INPUT_TYPE_BINARY_ACPI_TABLE; +        goto Cleanup;      } -    /* Not an ASL source file, default to a data table source file */ +    Type = ASL_INPUT_TYPE_BINARY; -    Type = ASL_INPUT_TYPE_ASCII_DATA;  Cleanup: @@ -248,7 +249,7 @@ AslDoDisassembly (      /* Handle additional output files for disassembler */ -    Gbl_FileType = ASL_INPUT_TYPE_ACPI_TABLE; +    Gbl_FileType = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;      Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);      /* This is where the disassembly happens */ @@ -454,7 +455,7 @@ AslDoOneFile (      /*       * Binary ACPI table was auto-detected, disassemble it       */ -    case ASL_INPUT_TYPE_ACPI_TABLE: +    case ASL_INPUT_TYPE_BINARY_ACPI_TABLE:          /* We have what appears to be an ACPI table, disassemble it */  | 
