aslstartup.c revision 210976
118334Speter 272562Sobrien/****************************************************************************** 3169689Skan * 4169689Skan * Module Name: aslstartup - Compiler startup routines, called from main 518334Speter * 690075Sobrien *****************************************************************************/ 718334Speter 890075Sobrien/****************************************************************************** 990075Sobrien * 1090075Sobrien * 1. Copyright Notice 1190075Sobrien * 1218334Speter * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. 1390075Sobrien * All rights reserved. 1490075Sobrien * 1590075Sobrien * 2. License 1690075Sobrien * 1718334Speter * 2.1. This is your license from Intel Corp. under its intellectual property 1818334Speter * rights. You may have additional license terms from the party that provided 1990075Sobrien * you this software, covering your right to use that party's intellectual 20169689Skan * property rights. 21169689Skan * 2218334Speter * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 2318334Speter * copy of the source code appearing in this file ("Covered Code") an 2450397Sobrien * irrevocable, perpetual, worldwide license under Intel's copyrights in the 25132718Skan * base code distributed originally by Intel ("Original Intel Code") to copy, 26132718Skan * make derivatives, distribute, use and display any portion of the Covered 2718334Speter * Code in any form, with the right to sublicense such rights; and 28117395Skan * 2918334Speter * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 3018334Speter * license (with the right to sublicense), under only those claims of Intel 3118334Speter * patents that are infringed by the Original Intel Code, to make, use, sell, 3218334Speter * offer to sell, and import the Covered Code and derivative works thereof 3350397Sobrien * solely to the minimum extent necessary to exercise the above copyright 3450397Sobrien * license, and in no event shall the patent license extend to any additions 3518334Speter * to or modifications of the Original Intel Code. No other license or right 3650397Sobrien * is granted directly or by implication, estoppel or otherwise; 3790075Sobrien * 3890075Sobrien * The above copyright and patent license is granted only if the following 3918334Speter * conditions are met: 4090075Sobrien * 4190075Sobrien * 3. Conditions 4218334Speter * 4390075Sobrien * 3.1. Redistribution of Source with Rights to Further Distribute Source. 4418334Speter * Redistribution of source code of any substantial portion of the Covered 4518334Speter * Code or modification with rights to further distribute source must include 4650397Sobrien * the above Copyright Notice, the above License, this list of Conditions, 4790075Sobrien * and the following Disclaimer and Export Compliance provision. In addition, 4890075Sobrien * Licensee must cause all Covered Code to which Licensee contributes to 4990075Sobrien * contain a file documenting the changes Licensee made to create that Covered 5090075Sobrien * Code and the date of any change. Licensee must include in that file the 51169689Skan * documentation of any changes made by any predecessor Licensee. Licensee 52169689Skan * must include a prominent statement that the modification is derived, 53169689Skan * directly or indirectly, from Original Intel Code. 54132718Skan * 55169689Skan * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 5618334Speter * Redistribution of source code of any substantial portion of the Covered 5718334Speter * Code or modification without rights to further distribute source must 5818334Speter * include the following Disclaimer and Export Compliance provision in the 5918334Speter * documentation and/or other materials provided with distribution. In 6018334Speter * addition, Licensee may not authorize further sublicense of source of any 6118334Speter * portion of the Covered Code, and must include terms to the effect that the 6218334Speter * license from Licensee to its licensee is limited to the intellectual 6318334Speter * property embodied in the software Licensee provides to its licensee, and 6418334Speter * not to intellectual property embodied in modifications its licensee may 65107590Sobrien * make. 6618334Speter * 6790075Sobrien * 3.3. Redistribution of Executable. Redistribution in executable form of any 6818334Speter * substantial portion of the Covered Code or modification must reproduce the 69107590Sobrien * above Copyright Notice, and the following Disclaimer and Export Compliance 7018334Speter * provision in the documentation and/or other materials provided with the 7118334Speter * distribution. 7218334Speter * 7318334Speter * 3.4. Intel retains all right, title, and interest in and to the Original 7418334Speter * Intel Code. 7518334Speter * 7618334Speter * 3.5. Neither the name Intel nor any other trademark owned or controlled by 7718334Speter * Intel shall be used in advertising or otherwise to promote the sale, use or 7818334Speter * other dealings in products derived from or relating to the Covered Code 7918334Speter * without prior written authorization from Intel. 8018334Speter * 8150397Sobrien * 4. Disclaimer and Export Compliance 8218334Speter * 8318334Speter * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 8418334Speter * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 8518334Speter * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 8618334Speter * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 8718334Speter * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 8818334Speter * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 8918334Speter * PARTICULAR PURPOSE. 9018334Speter * 9118334Speter * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 9218334Speter * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 9318334Speter * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 9418334Speter * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 9518334Speter * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 9618334Speter * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 9718334Speter * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 9818334Speter * LIMITED REMEDY. 9918334Speter * 10018334Speter * 4.3. Licensee shall not export, either directly or indirectly, any of this 10118334Speter * software or system incorporating such software without first obtaining any 10290075Sobrien * required license or other approval from the U. S. Department of Commerce or 10390075Sobrien * any other agency or department of the United States Government. In the 10418334Speter * event Licensee exports any such software from the United States or 10518334Speter * re-exports any such software from a foreign destination, Licensee shall 10618334Speter * ensure that the distribution and export/re-export of the software is in 10790075Sobrien * compliance with all laws, regulations, orders, or other restrictions of the 10850397Sobrien * U.S. Export Administration Regulations. Licensee agrees that neither it nor 10918334Speter * any of its subsidiaries will export/re-export any technical data, process, 11090075Sobrien * software, or service, directly or indirectly, to any country for which the 11150397Sobrien * United States government or any agency thereof requires an export license, 11250397Sobrien * other governmental approval, or letter of assurance, without first obtaining 11350397Sobrien * such license, approval or letter. 11450397Sobrien * 11550397Sobrien *****************************************************************************/ 11690075Sobrien 11790075Sobrien 118132718Skan#include <contrib/dev/acpica/compiler/aslcompiler.h> 119132718Skan#include <contrib/dev/acpica/include/actables.h> 12050397Sobrien#include <contrib/dev/acpica/include/acapps.h> 12150397Sobrien 12250397Sobrien#define _COMPONENT ACPI_COMPILER 123132718Skan ACPI_MODULE_NAME ("aslstartup") 124169689Skan 125132718Skan 126132718Skan#define ASL_MAX_FILES 256 127132718Skanchar *FileList[ASL_MAX_FILES]; 128132718Skanint FileCount; 129169689SkanBOOLEAN AslToFile = TRUE; 130169689Skan 131132718Skan 132132718Skan/* Local prototypes */ 133132718Skan 134132718Skanstatic char ** 135132718SkanAsDoWildcard ( 136132718Skan char *DirectoryPathname, 137132718Skan char *FileSpecifier); 138169689Skan 139132718SkanUINT8 140132718SkanAslDetectSourceFileType ( 141132718Skan ASL_FILE_INFO *Info); 142132718Skan 143132718Skan 144132718Skan/******************************************************************************* 145132718Skan * 146132718Skan * FUNCTION: AslInitializeGlobals 147169689Skan * 148132718Skan * PARAMETERS: None 149132718Skan * 150132718Skan * RETURN: None 151132718Skan * 152132718Skan * DESCRIPTION: Re-initialize globals needed to restart the compiler. This 153132718Skan * allows multiple files to be disassembled and/or compiled. 154169689Skan * 155132718Skan ******************************************************************************/ 15690075Sobrien 157132718Skanvoid 15890075SobrienAslInitializeGlobals ( 159132718Skan void) 160132718Skan{ 161169689Skan UINT32 i; 16218334Speter 16318334Speter 16418334Speter /* Init compiler globals */ 16518334Speter 16618334Speter Gbl_CurrentColumn = 0; 16718334Speter Gbl_CurrentLineNumber = 1; 16818334Speter Gbl_LogicalLineNumber = 1; 16918334Speter Gbl_CurrentLineOffset = 0; 170117395Skan Gbl_InputFieldCount = 0; 171117395Skan Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 172117395Skan 173117395Skan Gbl_ErrorLog = NULL; 17452284Sobrien Gbl_NextError = NULL; 17590075Sobrien Gbl_Signature = NULL; 17652284Sobrien Gbl_FileType = 0; 17790075Sobrien 178169689Skan AslGbl_NextEvent = 0; 179169689Skan for (i = 0; i < ASL_NUM_REPORT_LEVELS; i++) 18052284Sobrien { 18152284Sobrien Gbl_ExceptionCount[i] = 0; 182117395Skan } 183117395Skan 184117395Skan Gbl_Files[ASL_FILE_AML_OUTPUT].Filename = NULL; 185117395Skan Gbl_Files[ASL_FILE_AML_OUTPUT].Handle = NULL; 186169689Skan 187169689Skan Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename = NULL; 188117395Skan Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle = NULL; 189117395Skan} 190132718Skan 191132718Skan 192132718Skan/****************************************************************************** 193132718Skan * 194169689Skan * FUNCTION: AsDoWildcard 195169689Skan * 196169689Skan * PARAMETERS: None 197132718Skan * 198132718Skan * RETURN: None 19918334Speter * 200169689Skan * DESCRIPTION: Process files via wildcards. This function is for the Windows 20118334Speter * case only. 202169689Skan * 203169689Skan ******************************************************************************/ 20418334Speter 205169689Skanstatic char ** 206132718SkanAsDoWildcard ( 207132718Skan char *DirectoryPathname, 208169689Skan char *FileSpecifier) 209132718Skan{ 210132718Skan#ifdef WIN32 211169689Skan void *DirInfo; 212169689Skan char *Filename; 213169689Skan 214169689Skan 215169689Skan FileCount = 0; 216169689Skan 217169689Skan /* Open parent directory */ 218169689Skan 219169689Skan DirInfo = AcpiOsOpenDirectory (DirectoryPathname, FileSpecifier, REQUEST_FILE_ONLY); 220169689Skan if (!DirInfo) 221169689Skan { 222169689Skan /* Either the directory of file does not exist */ 223169689Skan 224169689Skan Gbl_Files[ASL_FILE_INPUT].Filename = FileSpecifier; 225169689Skan FlFileError (ASL_FILE_INPUT, ASL_MSG_OPEN); 226169689Skan AslAbort (); 227169689Skan } 228169689Skan 229169689Skan /* Process each file that matches the wildcard specification */ 230169689Skan 231169689Skan while ((Filename = AcpiOsGetNextFilename (DirInfo))) 232169689Skan { 233169689Skan /* Add the filename to the file list */ 234132718Skan 235117395Skan FileList[FileCount] = AcpiOsAllocate (strlen (Filename) + 1); 23650397Sobrien strcpy (FileList[FileCount], Filename); 23718334Speter FileCount++; 23890075Sobrien 23918334Speter if (FileCount >= ASL_MAX_FILES) 24018334Speter { 24118334Speter printf ("Max files reached\n"); 24218334Speter FileList[0] = NULL; 24318334Speter return (FileList); 24418334Speter } 245132718Skan } 24618334Speter 24718334Speter /* Cleanup */ 24818334Speter 24950397Sobrien AcpiOsCloseDirectory (DirInfo); 25050397Sobrien FileList[FileCount] = NULL; 251117395Skan return (FileList); 25250397Sobrien 25318334Speter#else 25418334Speter /* 25518334Speter * Linux/Unix cases - Wildcards are expanded by the shell automatically. 25650397Sobrien * Just return the filename in a null terminated list 25750397Sobrien */ 25818334Speter FileList[0] = AcpiOsAllocate (strlen (FileSpecifier) + 1); 259117395Skan strcpy (FileList[0], FileSpecifier); 260117395Skan FileList[1] = NULL; 261117395Skan 26218334Speter return (FileList); 263117395Skan#endif 264117395Skan} 265117395Skan 266117395Skan 26718334Speter/******************************************************************************* 26818334Speter * 26918334Speter * FUNCTION: AslDetectSourceFileType 27018334Speter * 27118334Speter * PARAMETERS: Info - Name/Handle for the file (must be open) 27218334Speter * 27318334Speter * RETURN: File Type 27418334Speter * 275117395Skan * DESCRIPTION: Determine the type of the input file. Either binary (contains 27618334Speter * non-ASCII characters), ASL file, or an ACPI Data Table file. 27718334Speter * 27818334Speter ******************************************************************************/ 27918334Speter 28018334SpeterUINT8 28118334SpeterAslDetectSourceFileType ( 28218334Speter ASL_FILE_INFO *Info) 28318334Speter{ 28418334Speter char *FileChar; 28518334Speter UINT8 Type; 28618334Speter ACPI_STATUS Status; 28718334Speter 288117395Skan 28918334Speter /* Check for 100% ASCII source file (comments are ignored) */ 29018334Speter 29118334Speter Status = FlCheckForAscii (Info); 29218334Speter if (ACPI_FAILURE (Status)) 29318334Speter { 29418334Speter printf ("Non-ascii input file - %s\n", Info->Filename); 29518334Speter Type = ASL_INPUT_TYPE_BINARY; 29618334Speter goto Cleanup; 29718334Speter } 29818334Speter 29918334Speter /* 30018334Speter * File is ASCII. Determine if this is an ASL file or an ACPI data 30118334Speter * table file. 30218334Speter */ 30318334Speter while (fgets (Gbl_CurrentLineBuffer, ASL_LINE_BUFFER_SIZE, Info->Handle)) 30418334Speter { 30518334Speter /* Uppercase the buffer for caseless compare */ 30618334Speter 30718334Speter FileChar = Gbl_CurrentLineBuffer; 30818334Speter while (*FileChar) 30918334Speter { 31018334Speter *FileChar = (char) toupper ((int) *FileChar); 31118334Speter FileChar++; 312117395Skan } 313117395Skan 314117395Skan /* Presence of "DefinitionBlock" indicates actual ASL code */ 315117395Skan 316117395Skan if (strstr (Gbl_CurrentLineBuffer, "DEFINITIONBLOCK")) 317117395Skan { 318117395Skan /* Appears to be an ASL file */ 319117395Skan 320117395Skan Type = ASL_INPUT_TYPE_ASCII_ASL; 321117395Skan goto Cleanup; 322117395Skan } 323117395Skan } 324117395Skan 325117395Skan /* Not an ASL source file, default to a data table source file */ 326117395Skan 327117395Skan Type = ASL_INPUT_TYPE_ASCII_DATA; 328117395Skan 329117395SkanCleanup: 330117395Skan 331117395Skan /* Must seek back to the start of the file */ 332117395Skan 33318334Speter fseek (Info->Handle, 0, SEEK_SET); 33450397Sobrien return (Type); 33518334Speter} 33618334Speter 33718334Speter 338132718Skan/******************************************************************************* 33918334Speter * 340132718Skan * FUNCTION: AslDoOneFile 34118334Speter * 34218334Speter * PARAMETERS: Filename - Name of the file 34318334Speter * 34418334Speter * RETURN: Status 34518334Speter * 34618334Speter * DESCRIPTION: Process a single file - either disassemble, compile, or both 34718334Speter * 34818334Speter ******************************************************************************/ 349132718Skan 35018334SpeterACPI_STATUS 35118334SpeterAslDoOneFile ( 35218334Speter char *Filename) 353169689Skan{ 354169689Skan ACPI_STATUS Status; 35518334Speter 35618334Speter 35718334Speter Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 35818334Speter 359117395Skan /* Re-initialize "some" compiler globals */ 360117395Skan 36118334Speter AslInitializeGlobals (); 36218334Speter 363169689Skan /* 36418334Speter * AML Disassembly (Optional) 365169689Skan */ 366169689Skan if (Gbl_DisasmFlag || Gbl_GetAllTables) 367169689Skan { 368169689Skan /* ACPICA subsystem initialization */ 369169689Skan 37018334Speter Status = AdInitialize (); 37118334Speter if (ACPI_FAILURE (Status)) 37218334Speter { 37318334Speter return (Status); 37418334Speter } 37518334Speter 37618334Speter Status = AcpiAllocateRootTable (4); 37718334Speter if (ACPI_FAILURE (Status)) 37818334Speter { 37918334Speter AcpiOsPrintf ("Could not initialize ACPI Table Manager, %s\n", 380169689Skan AcpiFormatException (Status)); 38118334Speter return (Status); 38218334Speter } 38318334Speter 38418334Speter /* This is where the disassembly happens */ 38518334Speter 38618334Speter AcpiGbl_DbOpt_disasm = TRUE; 38718334Speter Status = AdAmlDisassemble (AslToFile, 38818334Speter Gbl_Files[ASL_FILE_INPUT].Filename, 38990075Sobrien Gbl_OutputFilenamePrefix, 39090075Sobrien &Gbl_Files[ASL_FILE_INPUT].Filename, 391169689Skan Gbl_GetAllTables); 39290075Sobrien if (ACPI_FAILURE (Status)) 39390075Sobrien { 39490075Sobrien return (Status); 39590075Sobrien } 39690075Sobrien 39790075Sobrien /* Shutdown compiler and ACPICA subsystem */ 39890075Sobrien 39990075Sobrien AeClearErrorLog (); 40090075Sobrien AcpiTerminate (); 40190075Sobrien 402132718Skan /* 403132718Skan * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the 404132718Skan * .DSL disassembly file, which can now be compiled if requested 405132718Skan */ 406132718Skan if (Gbl_DoCompile) 407132718Skan { 40890075Sobrien AcpiOsPrintf ("\nCompiling \"%s\"\n", 40918334Speter Gbl_Files[ASL_FILE_INPUT].Filename); 41018334Speter } 41190075Sobrien else 412132718Skan { 41318334Speter Gbl_Files[ASL_FILE_INPUT].Filename = NULL; 414169689Skan return (AE_OK); 415169689Skan } 416169689Skan } 417169689Skan 418169689Skan /* 419169689Skan * Open the input file. Here, this should be an ASCII source file, 420169689Skan * either an ASL file or a Data Table file 421169689Skan */ 422169689Skan Status = FlOpenInputFile (Gbl_Files[ASL_FILE_INPUT].Filename); 423132718Skan if (ACPI_FAILURE (Status)) 424169689Skan { 425132718Skan AePrintErrorLog (ASL_FILE_STDERR); 42690075Sobrien return (AE_ERROR); 427132718Skan } 42818334Speter 429132718Skan /* Determine input file type */ 430132718Skan 43118334Speter Gbl_FileType = AslDetectSourceFileType (&Gbl_Files[ASL_FILE_INPUT]); 432132718Skan if (Gbl_FileType == ASL_INPUT_TYPE_BINARY) 433132718Skan { 43418334Speter return (AE_ERROR); 43518334Speter } 43650397Sobrien 437132718Skan /* 438132718Skan * If -p not specified, we will use the input filename as the 43950397Sobrien * output filename prefix 440169689Skan */ 441169689Skan if (Gbl_UseDefaultAmlFilename) 44218334Speter { 44390075Sobrien Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename; 44490075Sobrien } 44518334Speter 44690075Sobrien /* Open the optional output files (listings, etc.) */ 44790075Sobrien 448132718Skan Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix); 449132718Skan if (ACPI_FAILURE (Status)) 450132718Skan { 451132718Skan AePrintErrorLog (ASL_FILE_STDERR); 45218334Speter return (AE_ERROR); 45318334Speter } 45418334Speter 455132718Skan /* 456132718Skan * Compilation of ASL source versus DataTable source uses different 457132718Skan * compiler subsystems 458132718Skan */ 459132718Skan switch (Gbl_FileType) 460132718Skan { 461132718Skan /* 462132718Skan * Data Table Compilation 463169689Skan */ 464169689Skan case ASL_INPUT_TYPE_ASCII_DATA: 465132718Skan 466132718Skan Status = DtDoCompile (); 467132718Skan 468132718Skan if (Gbl_Signature) 469132718Skan { 470132718Skan ACPI_FREE (Gbl_Signature); 471132718Skan Gbl_Signature = NULL; 472132718Skan } 473132718Skan AeClearErrorLog (); 474169689Skan return (Status); 475132718Skan 476132718Skan /* 477132718Skan * ASL Compilation (Optional) 478169689Skan */ 479169689Skan case ASL_INPUT_TYPE_ASCII_ASL: 480132718Skan 481132718Skan /* ACPICA subsystem initialization */ 482169689Skan 483169689Skan Status = AdInitialize (); 484169689Skan if (ACPI_FAILURE (Status)) 485169689Skan { 486169689Skan return (Status); 487132718Skan } 488169689Skan 489169689Skan Status = CmDoCompile (); 490169689Skan AcpiTerminate (); 491169689Skan 492169689Skan /* 493132718Skan * Return non-zero exit code if there have been errors, unless the 494169689Skan * global ignore error flag has been set 495132718Skan */ 496132718Skan if ((Gbl_ExceptionCount[ASL_ERROR] > 0) && (!Gbl_IgnoreErrors)) 49718334Speter { 49818334Speter return (AE_ERROR); 49918334Speter } 50018334Speter 50118334Speter AeClearErrorLog (); 50218334Speter return (AE_OK); 50318334Speter 50418334Speter case ASL_INPUT_TYPE_BINARY: 50518334Speter 50618334Speter AePrintErrorLog (ASL_FILE_STDERR); 50718334Speter return (AE_ERROR); 50818334Speter 50918334Speter default: 51018334Speter printf ("Unknown file type %X\n", Gbl_FileType); 51118334Speter return (AE_ERROR); 51218334Speter } 51318334Speter} 51418334Speter 51518334Speter 51618334Speter/******************************************************************************* 51718334Speter * 51818334Speter * FUNCTION: AslDoOnePathname 51918334Speter * 52018334Speter * PARAMETERS: Pathname - Full pathname, possibly with wildcards 52118334Speter * 52218334Speter * RETURN: Status 52318334Speter * 52418334Speter * DESCRIPTION: Process one pathname, possible terminated with a wildcard 52518334Speter * specification. If a wildcard, it is expanded and the multiple 52618334Speter * files are processed. 52718334Speter * 52818334Speter ******************************************************************************/ 529169689Skan 530132718SkanACPI_STATUS 531132718SkanAslDoOnePathname ( 532132718Skan char *Pathname, 533132718Skan ASL_PATHNAME_CALLBACK PathCallback) 534132718Skan{ 53518334Speter ACPI_STATUS Status = AE_OK; 53618334Speter char **FileList; 53718334Speter char *Filename; 53818334Speter char *FullPathname; 53918334Speter 54018334Speter 54118334Speter /* Split incoming path into a directory/filename combo */ 54218334Speter 54318334Speter Status = FlSplitInputPathname (Pathname, &Gbl_DirectoryPath, &Filename); 54418334Speter if (ACPI_FAILURE (Status)) 54518334Speter { 54618334Speter return (Status); 54718334Speter } 54818334Speter 54918334Speter /* Expand possible wildcard into a file list (Windows/DOS only) */ 55018334Speter 55118334Speter FileList = AsDoWildcard (Gbl_DirectoryPath, Filename); 55218334Speter while (*FileList) 55318334Speter { 55418334Speter FullPathname = ACPI_ALLOCATE ( 55518334Speter strlen (Gbl_DirectoryPath) + strlen (*FileList) + 1); 55618334Speter 55718334Speter /* Construct a full path to the file */ 55818334Speter 55918334Speter strcpy (FullPathname, Gbl_DirectoryPath); 56018334Speter strcat (FullPathname, *FileList); 56118334Speter 56218334Speter /* 56318334Speter * If -p not specified, we will use the input filename as the 56418334Speter * output filename prefix 56518334Speter */ 56618334Speter if (Gbl_UseDefaultAmlFilename) 56718334Speter { 56890075Sobrien Gbl_OutputFilenamePrefix = FullPathname; 56918334Speter } 57018334Speter 57118334Speter /* Save status from all compiles */ 57290075Sobrien 57318334Speter Status |= (*PathCallback) (FullPathname); 57418334Speter 57518334Speter ACPI_FREE (FullPathname); 57618334Speter ACPI_FREE (*FileList); 57718334Speter *FileList = NULL; 57818334Speter FileList++; 57918334Speter } 58018334Speter 58118334Speter ACPI_FREE (Gbl_DirectoryPath); 58218334Speter ACPI_FREE (Filename); 58318334Speter return (Status); 58418334Speter} 58518334Speter 58618334Speter