diff options
Diffstat (limited to 'source/compiler/aslutils.c')
-rw-r--r-- | source/compiler/aslutils.c | 177 |
1 files changed, 132 insertions, 45 deletions
diff --git a/source/compiler/aslutils.c b/source/compiler/aslutils.c index 80149247e145..ed2948d04365 100644 --- a/source/compiler/aslutils.c +++ b/source/compiler/aslutils.c @@ -223,6 +223,7 @@ UtQueryForOverwrite ( char *Pathname) { struct stat StatInfo; + int InChar = 0x34; if (!stat (Pathname, &StatInfo)) @@ -230,7 +231,13 @@ UtQueryForOverwrite ( fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", Pathname); - if (getchar () != 'y') + InChar = fgetc (stdin); + if (InChar == '\n') + { + InChar = fgetc (stdin); + } + + if ((InChar != 'y') && (InChar != 'Y')) { return (FALSE); } @@ -559,58 +566,54 @@ UtDisplayOneSummary ( /* Summary of main input and output files */ - if (AslGbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) + FileNode = FlGetCurrentFileNode (); + if (!FileNode) + { + fprintf (stderr, "Summary could not be generated"); + return; + } + + if (FileNode->ParserErrorDetected) + { + FlPrintFile (FileId, + "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", + "Input file:", AslGbl_Files[ASL_FILE_INPUT].Filename); + } + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_DATA) { FlPrintFile (FileId, - "%-14s %s - %u lines, %u bytes, %u fields\n", + "%-14s %s - %7u bytes %6u fields %8u source lines\n", "Table Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_CurrentLineNumber, - AslGbl_InputByteCount, AslGbl_InputFieldCount); + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, FileNode->TotalFields, + FileNode->TotalLineCount); - if ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || (AslGbl_IgnoreErrors)) - { - FlPrintFile (FileId, - "%-14s %s - %u bytes\n", - "Binary Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, AslGbl_TableLength); - } + FlPrintFile (FileId, + "%-14s %s - %7u bytes\n", + "Binary Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FileNode->OutputByteLength); } - else + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_ASL) { - FileNode = FlGetCurrentFileNode (); - if (!FileNode) - { - fprintf (stderr, "Summary could not be generated"); - return; - } - if (FileNode->ParserErrorDetected) - { - FlPrintFile (FileId, - "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", - "ASL Input:", AslGbl_Files[ASL_FILE_INPUT].Filename); - } - else + FlPrintFile (FileId, + "%-14s %s - %7u bytes %6u keywords %6u source lines\n", + "ASL Input:", + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, + FileNode->TotalKeywords, + FileNode->TotalLineCount); + + /* AML summary */ + + if (DisplayAMLSummary) { FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u keywords %6u source lines\n", - "ASL Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, - FileNode->OriginalInputFileSize, - FileNode->TotalKeywords, - FileNode->TotalLineCount); - - /* AML summary */ - - if (DisplayAMLSummary) - { - FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", - "AML Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, - FlGetFileSize (ASL_FILE_AML_OUTPUT), - FileNode->TotalExecutableOpcodes, - FileNode->TotalNamedObjects); - } + "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", + "AML Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, + FlGetFileSize (ASL_FILE_AML_OUTPUT), + FileNode->TotalExecutableOpcodes, + FileNode->TotalNamedObjects); } } @@ -994,6 +997,37 @@ UtAttachNamepathToOwner ( /******************************************************************************* * + * FUNCTION: UtNameContainsAllPrefix + * + * PARAMETERS: Op - Op containing NameString + * + * RETURN: NameString consists of all ^ characters + * + * DESCRIPTION: Determine if this Op contains a name segment that consists of + * all '^' characters. + * + ******************************************************************************/ + +BOOLEAN +UtNameContainsAllPrefix ( + ACPI_PARSE_OBJECT *Op) +{ + UINT32 Length = Op->Asl.AmlLength; + UINT32 i; + + for (i = 0; i < Length; i++) + { + if (Op->Asl.Value.String[i] != '^') + { + return (FALSE); + } + } + + return (TRUE); +} + +/******************************************************************************* + * * FUNCTION: UtDoConstant * * PARAMETERS: String - Hex/Decimal/Octal @@ -1026,3 +1060,56 @@ UtDoConstant ( return (ConvertedInteger); } + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrdup + * + * PARAMETERS: String1 - string to duplicate + * + * RETURN: int that signifies string relationship. Zero means strings + * are equal. + * + * DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory + * reclamation. + * + ******************************************************************************/ + +char * +AcpiUtStrdup ( + char *String) +{ + char *NewString = (char *) UtLocalCalloc (strlen (String) + 1); + + + strcpy (NewString, String); + return (NewString); +} + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrcat + * + * PARAMETERS: String1 + * String2 + * + * RETURN: New string with String1 concatenated with String2 + * + * DESCRIPTION: Concatenate string1 and string2 + * + ******************************************************************************/ + +char * +AcpiUtStrcat ( + char *String1, + char *String2) +{ + UINT32 String1Length = strlen (String1); + char *NewString = (char *) UtLocalCalloc (strlen (String1) + strlen (String2) + 1); + + strcpy (NewString, String1); + strcpy (NewString + String1Length, String2); + return (NewString); +} |