153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 3efcc2a30SJung-uk Kim * Module Name: aslfiles - File support functions 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 7d244b227SJung-uk Kim /* 8efcc2a30SJung-uk Kim * Copyright (C) 2000 - 2013, Intel Corp. 953289f6aSNate Lawson * All rights reserved. 1053289f6aSNate Lawson * 11d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without 12d244b227SJung-uk Kim * modification, are permitted provided that the following conditions 13d244b227SJung-uk Kim * are met: 14d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 15d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 16d244b227SJung-uk Kim * without modification. 17d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 19d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 20d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further 21d244b227SJung-uk Kim * binary redistribution. 22d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 23d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived 24d244b227SJung-uk Kim * from this software without specific prior written permission. 2553289f6aSNate Lawson * 26d244b227SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 27d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 28d244b227SJung-uk Kim * Software Foundation. 2953289f6aSNate Lawson * 30d244b227SJung-uk Kim * NO WARRANTY 31d244b227SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32d244b227SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33d244b227SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34d244b227SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35d244b227SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36d244b227SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37d244b227SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38d244b227SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39d244b227SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40d244b227SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41d244b227SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 42d244b227SJung-uk Kim */ 4353289f6aSNate Lawson 44ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 45ab6f3bf9SJung-uk Kim #include <contrib/dev/acpica/include/acapps.h> 4653289f6aSNate Lawson 4753289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 4853289f6aSNate Lawson ACPI_MODULE_NAME ("aslfiles") 4953289f6aSNate Lawson 50fba7fc7eSJung-uk Kim /* Local prototypes */ 51fba7fc7eSJung-uk Kim 524c52cad2SJung-uk Kim FILE * 53d6dd1baeSJung-uk Kim FlOpenIncludeWithPrefix ( 54d6dd1baeSJung-uk Kim char *PrefixDir, 55d6dd1baeSJung-uk Kim char *Filename); 56d6dd1baeSJung-uk Kim 57fba7fc7eSJung-uk Kim 58fba7fc7eSJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 59fba7fc7eSJung-uk Kim ACPI_STATUS 60fba7fc7eSJung-uk Kim FlParseInputPathname ( 61fba7fc7eSJung-uk Kim char *InputFilename); 62fba7fc7eSJung-uk Kim #endif 63fba7fc7eSJung-uk Kim 6453289f6aSNate Lawson 6553289f6aSNate Lawson /******************************************************************************* 6653289f6aSNate Lawson * 6753289f6aSNate Lawson * FUNCTION: FlSetLineNumber 6853289f6aSNate Lawson * 6953289f6aSNate Lawson * PARAMETERS: Op - Parse node for the LINE asl statement 7053289f6aSNate Lawson * 7153289f6aSNate Lawson * RETURN: None. 7253289f6aSNate Lawson * 7353289f6aSNate Lawson * DESCRIPTION: Set the current line number 7453289f6aSNate Lawson * 7553289f6aSNate Lawson ******************************************************************************/ 7653289f6aSNate Lawson 7753289f6aSNate Lawson void 7853289f6aSNate Lawson FlSetLineNumber ( 79eef1b955SJung-uk Kim UINT32 LineNumber) 8053289f6aSNate Lawson { 8153289f6aSNate Lawson 82eef1b955SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New line number %u (old %u)\n", 83eef1b955SJung-uk Kim LineNumber, Gbl_LogicalLineNumber); 84eef1b955SJung-uk Kim 85eef1b955SJung-uk Kim Gbl_CurrentLineNumber = LineNumber; 86eef1b955SJung-uk Kim Gbl_LogicalLineNumber = LineNumber; 87eef1b955SJung-uk Kim } 88eef1b955SJung-uk Kim 89eef1b955SJung-uk Kim 90eef1b955SJung-uk Kim /******************************************************************************* 91eef1b955SJung-uk Kim * 92eef1b955SJung-uk Kim * FUNCTION: FlSetFilename 93eef1b955SJung-uk Kim * 94eef1b955SJung-uk Kim * PARAMETERS: Op - Parse node for the LINE asl statement 95eef1b955SJung-uk Kim * 96eef1b955SJung-uk Kim * RETURN: None. 97eef1b955SJung-uk Kim * 98eef1b955SJung-uk Kim * DESCRIPTION: Set the current filename 99eef1b955SJung-uk Kim * 100eef1b955SJung-uk Kim ******************************************************************************/ 101eef1b955SJung-uk Kim 102eef1b955SJung-uk Kim void 103eef1b955SJung-uk Kim FlSetFilename ( 104eef1b955SJung-uk Kim char *Filename) 105eef1b955SJung-uk Kim { 106eef1b955SJung-uk Kim 107eef1b955SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New filename %s (old %s)\n", 108eef1b955SJung-uk Kim Filename, Gbl_Files[ASL_FILE_INPUT].Filename); 109eef1b955SJung-uk Kim 110eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 11153289f6aSNate Lawson } 11253289f6aSNate Lawson 11353289f6aSNate Lawson 11453289f6aSNate Lawson /******************************************************************************* 11553289f6aSNate Lawson * 116d6dd1baeSJung-uk Kim * FUNCTION: FlAddIncludeDirectory 117d6dd1baeSJung-uk Kim * 118d6dd1baeSJung-uk Kim * PARAMETERS: Dir - Directory pathname string 119d6dd1baeSJung-uk Kim * 120d6dd1baeSJung-uk Kim * RETURN: None 121d6dd1baeSJung-uk Kim * 122d6dd1baeSJung-uk Kim * DESCRIPTION: Add a directory the list of include prefix directories. 123d6dd1baeSJung-uk Kim * 124d6dd1baeSJung-uk Kim ******************************************************************************/ 125d6dd1baeSJung-uk Kim 126d6dd1baeSJung-uk Kim void 127d6dd1baeSJung-uk Kim FlAddIncludeDirectory ( 128d6dd1baeSJung-uk Kim char *Dir) 129d6dd1baeSJung-uk Kim { 130d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NewDir; 131d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 132d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *PrevDir = NULL; 133d6dd1baeSJung-uk Kim UINT32 NeedsSeparator = 0; 134d6dd1baeSJung-uk Kim size_t DirLength; 135d6dd1baeSJung-uk Kim 136d6dd1baeSJung-uk Kim 137d6dd1baeSJung-uk Kim DirLength = strlen (Dir); 138d6dd1baeSJung-uk Kim if (!DirLength) 139d6dd1baeSJung-uk Kim { 140d6dd1baeSJung-uk Kim return; 141d6dd1baeSJung-uk Kim } 142d6dd1baeSJung-uk Kim 143d6dd1baeSJung-uk Kim /* Make sure that the pathname ends with a path separator */ 144d6dd1baeSJung-uk Kim 145d6dd1baeSJung-uk Kim if ((Dir[DirLength-1] != '/') && 146d6dd1baeSJung-uk Kim (Dir[DirLength-1] != '\\')) 147d6dd1baeSJung-uk Kim { 148d6dd1baeSJung-uk Kim NeedsSeparator = 1; 149d6dd1baeSJung-uk Kim } 150d6dd1baeSJung-uk Kim 151d6dd1baeSJung-uk Kim NewDir = ACPI_ALLOCATE_ZEROED (sizeof (ASL_INCLUDE_DIR)); 152d6dd1baeSJung-uk Kim NewDir->Dir = ACPI_ALLOCATE (DirLength + 1 + NeedsSeparator); 153d6dd1baeSJung-uk Kim strcpy (NewDir->Dir, Dir); 154d6dd1baeSJung-uk Kim if (NeedsSeparator) 155d6dd1baeSJung-uk Kim { 156d6dd1baeSJung-uk Kim strcat (NewDir->Dir, "/"); 157d6dd1baeSJung-uk Kim } 158d6dd1baeSJung-uk Kim 159d6dd1baeSJung-uk Kim /* 160d6dd1baeSJung-uk Kim * Preserve command line ordering of -I options by adding new elements 161d6dd1baeSJung-uk Kim * at the end of the list 162d6dd1baeSJung-uk Kim */ 163d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 164d6dd1baeSJung-uk Kim while (NextDir) 165d6dd1baeSJung-uk Kim { 166d6dd1baeSJung-uk Kim PrevDir = NextDir; 167d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 168d6dd1baeSJung-uk Kim } 169d6dd1baeSJung-uk Kim 170d6dd1baeSJung-uk Kim if (PrevDir) 171d6dd1baeSJung-uk Kim { 172d6dd1baeSJung-uk Kim PrevDir->Next = NewDir; 173d6dd1baeSJung-uk Kim } 174d6dd1baeSJung-uk Kim else 175d6dd1baeSJung-uk Kim { 176d6dd1baeSJung-uk Kim Gbl_IncludeDirList = NewDir; 177d6dd1baeSJung-uk Kim } 178d6dd1baeSJung-uk Kim } 179d6dd1baeSJung-uk Kim 180d6dd1baeSJung-uk Kim 181d6dd1baeSJung-uk Kim /******************************************************************************* 182d6dd1baeSJung-uk Kim * 183a7a3b383SJung-uk Kim * FUNCTION: FlMergePathnames 184a7a3b383SJung-uk Kim * 185a7a3b383SJung-uk Kim * PARAMETERS: PrefixDir - Prefix directory pathname. Can be NULL or 186a7a3b383SJung-uk Kim * a zero length string. 187a7a3b383SJung-uk Kim * FilePathname - The include filename from the source ASL. 188a7a3b383SJung-uk Kim * 189a7a3b383SJung-uk Kim * RETURN: Merged pathname string 190a7a3b383SJung-uk Kim * 191a7a3b383SJung-uk Kim * DESCRIPTION: Merge two pathnames that (probably) have common elements, to 192a7a3b383SJung-uk Kim * arrive at a minimal length string. Merge can occur if the 193a7a3b383SJung-uk Kim * FilePathname is relative to the PrefixDir. 194a7a3b383SJung-uk Kim * 195a7a3b383SJung-uk Kim ******************************************************************************/ 196a7a3b383SJung-uk Kim 197a7a3b383SJung-uk Kim char * 198a7a3b383SJung-uk Kim FlMergePathnames ( 199a7a3b383SJung-uk Kim char *PrefixDir, 200a7a3b383SJung-uk Kim char *FilePathname) 201a7a3b383SJung-uk Kim { 202a7a3b383SJung-uk Kim char *CommonPath; 203a7a3b383SJung-uk Kim char *Pathname; 204a7a3b383SJung-uk Kim char *LastElement; 205a7a3b383SJung-uk Kim 206a7a3b383SJung-uk Kim 207a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Prefix path - \"%s\"\n" 208a7a3b383SJung-uk Kim "Include: FilePathname - \"%s\"\n", 209a7a3b383SJung-uk Kim PrefixDir, FilePathname); 210a7a3b383SJung-uk Kim 211a7a3b383SJung-uk Kim /* 212a7a3b383SJung-uk Kim * If there is no prefix directory or if the file pathname is absolute, 213a7a3b383SJung-uk Kim * just return the original file pathname 214a7a3b383SJung-uk Kim */ 215a7a3b383SJung-uk Kim if (!PrefixDir || (!*PrefixDir) || 216a7a3b383SJung-uk Kim (*FilePathname == '/') || 217a7a3b383SJung-uk Kim (FilePathname[1] == ':')) 218a7a3b383SJung-uk Kim { 219a7a3b383SJung-uk Kim Pathname = ACPI_ALLOCATE (strlen (FilePathname) + 1); 220a7a3b383SJung-uk Kim strcpy (Pathname, FilePathname); 221a7a3b383SJung-uk Kim goto ConvertBackslashes; 222a7a3b383SJung-uk Kim } 223a7a3b383SJung-uk Kim 224a7a3b383SJung-uk Kim /* Need a local copy of the prefix directory path */ 225a7a3b383SJung-uk Kim 226a7a3b383SJung-uk Kim CommonPath = ACPI_ALLOCATE (strlen (PrefixDir) + 1); 227a7a3b383SJung-uk Kim strcpy (CommonPath, PrefixDir); 228a7a3b383SJung-uk Kim 229a7a3b383SJung-uk Kim /* 230a7a3b383SJung-uk Kim * Walk forward through the file path, and simultaneously backward 231a7a3b383SJung-uk Kim * through the prefix directory path until there are no more 232a7a3b383SJung-uk Kim * relative references at the start of the file path. 233a7a3b383SJung-uk Kim */ 234a7a3b383SJung-uk Kim while (*FilePathname && (!strncmp (FilePathname, "../", 3))) 235a7a3b383SJung-uk Kim { 236a7a3b383SJung-uk Kim /* Remove last element of the prefix directory path */ 237a7a3b383SJung-uk Kim 238a7a3b383SJung-uk Kim LastElement = strrchr (CommonPath, '/'); 239a7a3b383SJung-uk Kim if (!LastElement) 240a7a3b383SJung-uk Kim { 241a7a3b383SJung-uk Kim goto ConcatenatePaths; 242a7a3b383SJung-uk Kim } 243a7a3b383SJung-uk Kim 244a7a3b383SJung-uk Kim *LastElement = 0; /* Terminate CommonPath string */ 245a7a3b383SJung-uk Kim FilePathname += 3; /* Point to next path element */ 246a7a3b383SJung-uk Kim } 247a7a3b383SJung-uk Kim 248a7a3b383SJung-uk Kim /* 249a7a3b383SJung-uk Kim * Remove the last element of the prefix directory path (it is the same as 250a7a3b383SJung-uk Kim * the first element of the file pathname), and build the final merged 251a7a3b383SJung-uk Kim * pathname. 252a7a3b383SJung-uk Kim */ 253a7a3b383SJung-uk Kim LastElement = strrchr (CommonPath, '/'); 254a7a3b383SJung-uk Kim if (LastElement) 255a7a3b383SJung-uk Kim { 256a7a3b383SJung-uk Kim *LastElement = 0; 257a7a3b383SJung-uk Kim } 258a7a3b383SJung-uk Kim 259a7a3b383SJung-uk Kim /* Build the final merged pathname */ 260a7a3b383SJung-uk Kim 261a7a3b383SJung-uk Kim ConcatenatePaths: 262a7a3b383SJung-uk Kim Pathname = ACPI_ALLOCATE_ZEROED (strlen (CommonPath) + strlen (FilePathname) + 2); 263a7a3b383SJung-uk Kim if (LastElement && *CommonPath) 264a7a3b383SJung-uk Kim { 265a7a3b383SJung-uk Kim strcpy (Pathname, CommonPath); 266a7a3b383SJung-uk Kim strcat (Pathname, "/"); 267a7a3b383SJung-uk Kim } 268a7a3b383SJung-uk Kim strcat (Pathname, FilePathname); 269a7a3b383SJung-uk Kim ACPI_FREE (CommonPath); 270a7a3b383SJung-uk Kim 271a7a3b383SJung-uk Kim /* Convert all backslashes to normal slashes */ 272a7a3b383SJung-uk Kim 273a7a3b383SJung-uk Kim ConvertBackslashes: 274a7a3b383SJung-uk Kim UtConvertBackslashes (Pathname); 275a7a3b383SJung-uk Kim 276a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Merged Pathname - \"%s\"\n", 277a7a3b383SJung-uk Kim Pathname); 278a7a3b383SJung-uk Kim return (Pathname); 279a7a3b383SJung-uk Kim } 280a7a3b383SJung-uk Kim 281a7a3b383SJung-uk Kim 282a7a3b383SJung-uk Kim /******************************************************************************* 283a7a3b383SJung-uk Kim * 284d6dd1baeSJung-uk Kim * FUNCTION: FlOpenIncludeWithPrefix 285d6dd1baeSJung-uk Kim * 286d6dd1baeSJung-uk Kim * PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero 287d6dd1baeSJung-uk Kim * length string. 288d6dd1baeSJung-uk Kim * Filename - The include filename from the source ASL. 289d6dd1baeSJung-uk Kim * 290d6dd1baeSJung-uk Kim * RETURN: Valid file descriptor if successful. Null otherwise. 291d6dd1baeSJung-uk Kim * 292d6dd1baeSJung-uk Kim * DESCRIPTION: Open an include file and push it on the input file stack. 293d6dd1baeSJung-uk Kim * 294d6dd1baeSJung-uk Kim ******************************************************************************/ 295d6dd1baeSJung-uk Kim 2964c52cad2SJung-uk Kim FILE * 297d6dd1baeSJung-uk Kim FlOpenIncludeWithPrefix ( 298d6dd1baeSJung-uk Kim char *PrefixDir, 299d6dd1baeSJung-uk Kim char *Filename) 300d6dd1baeSJung-uk Kim { 301d6dd1baeSJung-uk Kim FILE *IncludeFile; 302d6dd1baeSJung-uk Kim char *Pathname; 303d6dd1baeSJung-uk Kim 304d6dd1baeSJung-uk Kim 305d6dd1baeSJung-uk Kim /* Build the full pathname to the file */ 306d6dd1baeSJung-uk Kim 307a7a3b383SJung-uk Kim Pathname = FlMergePathnames (PrefixDir, Filename); 308d6dd1baeSJung-uk Kim 309a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Opening file - \"%s\"\n\n", 310d6dd1baeSJung-uk Kim Pathname); 311d6dd1baeSJung-uk Kim 312d6dd1baeSJung-uk Kim /* Attempt to open the file, push if successful */ 313d6dd1baeSJung-uk Kim 314d6dd1baeSJung-uk Kim IncludeFile = fopen (Pathname, "r"); 315ed17e06eSJung-uk Kim if (!IncludeFile) 316d6dd1baeSJung-uk Kim { 317ed17e06eSJung-uk Kim fprintf (stderr, "Could not open include file %s\n", Pathname); 318ed17e06eSJung-uk Kim ACPI_FREE (Pathname); 319ed17e06eSJung-uk Kim return (NULL); 320ed17e06eSJung-uk Kim } 321ed17e06eSJung-uk Kim 322d6dd1baeSJung-uk Kim /* Push the include file on the open input file stack */ 323d6dd1baeSJung-uk Kim 324d6dd1baeSJung-uk Kim AslPushInputFileStack (IncludeFile, Pathname); 325d6dd1baeSJung-uk Kim return (IncludeFile); 326d6dd1baeSJung-uk Kim } 327d6dd1baeSJung-uk Kim 328d6dd1baeSJung-uk Kim 329d6dd1baeSJung-uk Kim /******************************************************************************* 330d6dd1baeSJung-uk Kim * 33153289f6aSNate Lawson * FUNCTION: FlOpenIncludeFile 33253289f6aSNate Lawson * 33353289f6aSNate Lawson * PARAMETERS: Op - Parse node for the INCLUDE ASL statement 33453289f6aSNate Lawson * 33553289f6aSNate Lawson * RETURN: None. 33653289f6aSNate Lawson * 33753289f6aSNate Lawson * DESCRIPTION: Open an include file and push it on the input file stack. 33853289f6aSNate Lawson * 33953289f6aSNate Lawson ******************************************************************************/ 34053289f6aSNate Lawson 34153289f6aSNate Lawson void 34253289f6aSNate Lawson FlOpenIncludeFile ( 34353289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 34453289f6aSNate Lawson { 345d6dd1baeSJung-uk Kim FILE *IncludeFile; 346d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 34753289f6aSNate Lawson 34853289f6aSNate Lawson 34953289f6aSNate Lawson /* Op must be valid */ 35053289f6aSNate Lawson 35153289f6aSNate Lawson if (!Op) 35253289f6aSNate Lawson { 35353289f6aSNate Lawson AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, 35453289f6aSNate Lawson Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 35553289f6aSNate Lawson Gbl_InputByteCount, Gbl_CurrentColumn, 35653289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node"); 35753289f6aSNate Lawson 35853289f6aSNate Lawson return; 35953289f6aSNate Lawson } 36053289f6aSNate Lawson 36153289f6aSNate Lawson /* 36253289f6aSNate Lawson * Flush out the "include ()" statement on this line, start 36353289f6aSNate Lawson * the actual include file on the next line 36453289f6aSNate Lawson */ 365eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 36653289f6aSNate Lawson FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n"); 36753289f6aSNate Lawson Gbl_CurrentLineOffset++; 36853289f6aSNate Lawson 36953289f6aSNate Lawson 370d6dd1baeSJung-uk Kim /* Attempt to open the include file */ 371d6dd1baeSJung-uk Kim 372d6dd1baeSJung-uk Kim /* If the file specifies an absolute path, just open it */ 373d6dd1baeSJung-uk Kim 374d6dd1baeSJung-uk Kim if ((Op->Asl.Value.String[0] == '/') || 375d6dd1baeSJung-uk Kim (Op->Asl.Value.String[0] == '\\') || 376d6dd1baeSJung-uk Kim (Op->Asl.Value.String[1] == ':')) 37753289f6aSNate Lawson { 378d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String); 379d6dd1baeSJung-uk Kim if (!IncludeFile) 380d6dd1baeSJung-uk Kim { 381d6dd1baeSJung-uk Kim goto ErrorExit; 382d6dd1baeSJung-uk Kim } 38353289f6aSNate Lawson return; 38453289f6aSNate Lawson } 38553289f6aSNate Lawson 386d6dd1baeSJung-uk Kim /* 387d6dd1baeSJung-uk Kim * The include filename is not an absolute path. 388d6dd1baeSJung-uk Kim * 389d6dd1baeSJung-uk Kim * First, search for the file within the "local" directory -- meaning 390d6dd1baeSJung-uk Kim * the same directory that contains the source file. 391d6dd1baeSJung-uk Kim * 392d6dd1baeSJung-uk Kim * Construct the file pathname from the global directory name. 393d6dd1baeSJung-uk Kim */ 394d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String); 395d6dd1baeSJung-uk Kim if (IncludeFile) 396d6dd1baeSJung-uk Kim { 397d6dd1baeSJung-uk Kim return; 398d6dd1baeSJung-uk Kim } 39953289f6aSNate Lawson 400d6dd1baeSJung-uk Kim /* 401d6dd1baeSJung-uk Kim * Second, search for the file within the (possibly multiple) directories 402d6dd1baeSJung-uk Kim * specified by the -I option on the command line. 403d6dd1baeSJung-uk Kim */ 404d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 405d6dd1baeSJung-uk Kim while (NextDir) 406d6dd1baeSJung-uk Kim { 407d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String); 408d6dd1baeSJung-uk Kim if (IncludeFile) 409d6dd1baeSJung-uk Kim { 410d6dd1baeSJung-uk Kim return; 411d6dd1baeSJung-uk Kim } 412d6dd1baeSJung-uk Kim 413d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 414d6dd1baeSJung-uk Kim } 415d6dd1baeSJung-uk Kim 416d6dd1baeSJung-uk Kim /* We could not open the include file after trying very hard */ 417d6dd1baeSJung-uk Kim 418d6dd1baeSJung-uk Kim ErrorExit: 419d6dd1baeSJung-uk Kim sprintf (MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno)); 420d6dd1baeSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer); 42153289f6aSNate Lawson } 42253289f6aSNate Lawson 42353289f6aSNate Lawson 42453289f6aSNate Lawson /******************************************************************************* 42553289f6aSNate Lawson * 426fba7fc7eSJung-uk Kim * FUNCTION: FlOpenInputFile 427fba7fc7eSJung-uk Kim * 428fba7fc7eSJung-uk Kim * PARAMETERS: InputFilename - The user-specified ASL source file to be 429fba7fc7eSJung-uk Kim * compiled 430fba7fc7eSJung-uk Kim * 431fba7fc7eSJung-uk Kim * RETURN: Status 432fba7fc7eSJung-uk Kim * 433fba7fc7eSJung-uk Kim * DESCRIPTION: Open the specified input file, and save the directory path to 434fba7fc7eSJung-uk Kim * the file so that include files can be opened in 435fba7fc7eSJung-uk Kim * the same directory. 436fba7fc7eSJung-uk Kim * 437fba7fc7eSJung-uk Kim ******************************************************************************/ 438fba7fc7eSJung-uk Kim 439fba7fc7eSJung-uk Kim ACPI_STATUS 440fba7fc7eSJung-uk Kim FlOpenInputFile ( 441fba7fc7eSJung-uk Kim char *InputFilename) 442fba7fc7eSJung-uk Kim { 443fba7fc7eSJung-uk Kim 444fba7fc7eSJung-uk Kim /* Open the input ASL file, text mode */ 445fba7fc7eSJung-uk Kim 446f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_INPUT, InputFilename, "rt"); 447fba7fc7eSJung-uk Kim AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle; 448fba7fc7eSJung-uk Kim 449fba7fc7eSJung-uk Kim return (AE_OK); 450fba7fc7eSJung-uk Kim } 451fba7fc7eSJung-uk Kim 452fba7fc7eSJung-uk Kim 453fba7fc7eSJung-uk Kim /******************************************************************************* 454fba7fc7eSJung-uk Kim * 455fba7fc7eSJung-uk Kim * FUNCTION: FlOpenAmlOutputFile 456fba7fc7eSJung-uk Kim * 457fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 458fba7fc7eSJung-uk Kim * 459fba7fc7eSJung-uk Kim * RETURN: Status 460fba7fc7eSJung-uk Kim * 461fba7fc7eSJung-uk Kim * DESCRIPTION: Create the output filename (*.AML) and open the file. The file 462fba7fc7eSJung-uk Kim * is created in the same directory as the parent input file. 463fba7fc7eSJung-uk Kim * 464fba7fc7eSJung-uk Kim ******************************************************************************/ 465fba7fc7eSJung-uk Kim 466fba7fc7eSJung-uk Kim ACPI_STATUS 467fba7fc7eSJung-uk Kim FlOpenAmlOutputFile ( 468fba7fc7eSJung-uk Kim char *FilenamePrefix) 469fba7fc7eSJung-uk Kim { 470fba7fc7eSJung-uk Kim char *Filename; 471fba7fc7eSJung-uk Kim 472fba7fc7eSJung-uk Kim 473fba7fc7eSJung-uk Kim /* Output filename usually comes from the ASL itself */ 474fba7fc7eSJung-uk Kim 475fba7fc7eSJung-uk Kim Filename = Gbl_Files[ASL_FILE_AML_OUTPUT].Filename; 476fba7fc7eSJung-uk Kim if (!Filename) 477fba7fc7eSJung-uk Kim { 478fba7fc7eSJung-uk Kim /* Create the output AML filename */ 479fba7fc7eSJung-uk Kim 480fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE); 481fba7fc7eSJung-uk Kim if (!Filename) 482fba7fc7eSJung-uk Kim { 483fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME, 484fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 485fba7fc7eSJung-uk Kim return (AE_ERROR); 486fba7fc7eSJung-uk Kim } 487fba7fc7eSJung-uk Kim } 488fba7fc7eSJung-uk Kim 489fba7fc7eSJung-uk Kim /* Open the output AML file in binary mode */ 490fba7fc7eSJung-uk Kim 491fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_AML_OUTPUT, Filename, "w+b"); 492fba7fc7eSJung-uk Kim return (AE_OK); 493fba7fc7eSJung-uk Kim } 494fba7fc7eSJung-uk Kim 495fba7fc7eSJung-uk Kim 496fba7fc7eSJung-uk Kim /******************************************************************************* 497fba7fc7eSJung-uk Kim * 498fba7fc7eSJung-uk Kim * FUNCTION: FlOpenMiscOutputFiles 499fba7fc7eSJung-uk Kim * 500fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 501fba7fc7eSJung-uk Kim * 502fba7fc7eSJung-uk Kim * RETURN: Status 503fba7fc7eSJung-uk Kim * 504fba7fc7eSJung-uk Kim * DESCRIPTION: Create and open the various output files needed, depending on 505fba7fc7eSJung-uk Kim * the command line options 506fba7fc7eSJung-uk Kim * 507fba7fc7eSJung-uk Kim ******************************************************************************/ 508fba7fc7eSJung-uk Kim 509fba7fc7eSJung-uk Kim ACPI_STATUS 510fba7fc7eSJung-uk Kim FlOpenMiscOutputFiles ( 511fba7fc7eSJung-uk Kim char *FilenamePrefix) 512fba7fc7eSJung-uk Kim { 513fba7fc7eSJung-uk Kim char *Filename; 514fba7fc7eSJung-uk Kim 515fba7fc7eSJung-uk Kim 516a88e22b7SJung-uk Kim /* Create/Open a hex output file if asked */ 517a88e22b7SJung-uk Kim 518a88e22b7SJung-uk Kim if (Gbl_HexOutputFlag) 519a88e22b7SJung-uk Kim { 520a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP); 521a88e22b7SJung-uk Kim if (!Filename) 522a88e22b7SJung-uk Kim { 523a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 524a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 525a88e22b7SJung-uk Kim return (AE_ERROR); 526a88e22b7SJung-uk Kim } 527a88e22b7SJung-uk Kim 528a88e22b7SJung-uk Kim /* Open the hex file, text mode */ 529a88e22b7SJung-uk Kim 530f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+t"); 531a88e22b7SJung-uk Kim 532a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_HEX_OUTPUT); 533a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT); 534a88e22b7SJung-uk Kim } 535a88e22b7SJung-uk Kim 536a88e22b7SJung-uk Kim /* Create/Open a debug output file if asked */ 537a88e22b7SJung-uk Kim 538a88e22b7SJung-uk Kim if (Gbl_DebugFlag) 539a88e22b7SJung-uk Kim { 540a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG); 541a88e22b7SJung-uk Kim if (!Filename) 542a88e22b7SJung-uk Kim { 543a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 544a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 545a88e22b7SJung-uk Kim return (AE_ERROR); 546a88e22b7SJung-uk Kim } 547a88e22b7SJung-uk Kim 548a88e22b7SJung-uk Kim /* Open the debug file as STDERR, text mode */ 549a88e22b7SJung-uk Kim 550a88e22b7SJung-uk Kim /* TBD: hide this behind a FlReopenFile function */ 551a88e22b7SJung-uk Kim 552a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename; 553a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = 554a88e22b7SJung-uk Kim freopen (Filename, "w+t", stderr); 555a88e22b7SJung-uk Kim 5564c52cad2SJung-uk Kim if (!Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle) 5574c52cad2SJung-uk Kim { 5584c52cad2SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 5594c52cad2SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 5604c52cad2SJung-uk Kim return (AE_ERROR); 5614c52cad2SJung-uk Kim } 5624c52cad2SJung-uk Kim 563a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT); 564a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT); 565a88e22b7SJung-uk Kim } 566a88e22b7SJung-uk Kim 567d244b227SJung-uk Kim /* Create/Open a listing output file if asked */ 568d244b227SJung-uk Kim 569d244b227SJung-uk Kim if (Gbl_ListingFlag) 570d244b227SJung-uk Kim { 571d244b227SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING); 572d244b227SJung-uk Kim if (!Filename) 573d244b227SJung-uk Kim { 574d244b227SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 575d244b227SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 576d244b227SJung-uk Kim return (AE_ERROR); 577d244b227SJung-uk Kim } 578d244b227SJung-uk Kim 579d244b227SJung-uk Kim /* Open the listing file, text mode */ 580d244b227SJung-uk Kim 581f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+t"); 582d244b227SJung-uk Kim 583d244b227SJung-uk Kim AslCompilerSignon (ASL_FILE_LISTING_OUTPUT); 584d244b227SJung-uk Kim AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT); 585d244b227SJung-uk Kim } 586d244b227SJung-uk Kim 587eef1b955SJung-uk Kim /* Create the preprocessor output file if preprocessor enabled */ 5884c52cad2SJung-uk Kim 589eef1b955SJung-uk Kim if (Gbl_PreprocessFlag) 590eef1b955SJung-uk Kim { 5914c52cad2SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROCESSOR); 5924c52cad2SJung-uk Kim if (!Filename) 5934c52cad2SJung-uk Kim { 5944c52cad2SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME, 5954c52cad2SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 5964c52cad2SJung-uk Kim return (AE_ERROR); 5974c52cad2SJung-uk Kim } 5984c52cad2SJung-uk Kim 599f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t"); 600eef1b955SJung-uk Kim } 6014c52cad2SJung-uk Kim 6024c52cad2SJung-uk Kim /* All done for data table compiler */ 6034c52cad2SJung-uk Kim 604a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 605a88e22b7SJung-uk Kim { 606a88e22b7SJung-uk Kim return (AE_OK); 607a88e22b7SJung-uk Kim } 608a88e22b7SJung-uk Kim 609fba7fc7eSJung-uk Kim /* Create/Open a combined source output file */ 610fba7fc7eSJung-uk Kim 611fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE); 612fba7fc7eSJung-uk Kim if (!Filename) 613fba7fc7eSJung-uk Kim { 614fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 615fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 616fba7fc7eSJung-uk Kim return (AE_ERROR); 617fba7fc7eSJung-uk Kim } 618fba7fc7eSJung-uk Kim 619fba7fc7eSJung-uk Kim /* 620fba7fc7eSJung-uk Kim * Open the source output file, binary mode (so that LF does not get 621fba7fc7eSJung-uk Kim * expanded to CR/LF on some systems, messing up our seek 622fba7fc7eSJung-uk Kim * calculations.) 623fba7fc7eSJung-uk Kim */ 624fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b"); 625fba7fc7eSJung-uk Kim 6264c52cad2SJung-uk Kim /* 6274c52cad2SJung-uk Kim // TBD: TEMP 6284c52cad2SJung-uk Kim // AslCompilerin = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle; 6294c52cad2SJung-uk Kim */ 630fba7fc7eSJung-uk Kim /* Create/Open a assembly code source output file if asked */ 631fba7fc7eSJung-uk Kim 632fba7fc7eSJung-uk Kim if (Gbl_AsmOutputFlag) 633fba7fc7eSJung-uk Kim { 634fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE); 635fba7fc7eSJung-uk Kim if (!Filename) 636fba7fc7eSJung-uk Kim { 637fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 638fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 639fba7fc7eSJung-uk Kim return (AE_ERROR); 640fba7fc7eSJung-uk Kim } 641fba7fc7eSJung-uk Kim 642fba7fc7eSJung-uk Kim /* Open the assembly code source file, text mode */ 643fba7fc7eSJung-uk Kim 644f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+t"); 645fba7fc7eSJung-uk Kim 646fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT); 647fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT); 648fba7fc7eSJung-uk Kim } 649fba7fc7eSJung-uk Kim 650fba7fc7eSJung-uk Kim /* Create/Open a C code source output file if asked */ 651fba7fc7eSJung-uk Kim 652fba7fc7eSJung-uk Kim if (Gbl_C_OutputFlag) 653fba7fc7eSJung-uk Kim { 654fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE); 655fba7fc7eSJung-uk Kim if (!Filename) 656fba7fc7eSJung-uk Kim { 657fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 658fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 659fba7fc7eSJung-uk Kim return (AE_ERROR); 660fba7fc7eSJung-uk Kim } 661fba7fc7eSJung-uk Kim 662fba7fc7eSJung-uk Kim /* Open the C code source file, text mode */ 663fba7fc7eSJung-uk Kim 664f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+t"); 665fba7fc7eSJung-uk Kim 666fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n"); 667fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT); 668fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT); 669fba7fc7eSJung-uk Kim } 670fba7fc7eSJung-uk Kim 671fba7fc7eSJung-uk Kim /* Create/Open a assembly include output file if asked */ 672fba7fc7eSJung-uk Kim 673fba7fc7eSJung-uk Kim if (Gbl_AsmIncludeOutputFlag) 674fba7fc7eSJung-uk Kim { 675fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE); 676fba7fc7eSJung-uk Kim if (!Filename) 677fba7fc7eSJung-uk Kim { 678fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 679fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 680fba7fc7eSJung-uk Kim return (AE_ERROR); 681fba7fc7eSJung-uk Kim } 682fba7fc7eSJung-uk Kim 683fba7fc7eSJung-uk Kim /* Open the assembly include file, text mode */ 684fba7fc7eSJung-uk Kim 685f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+t"); 686fba7fc7eSJung-uk Kim 687fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT); 688fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT); 689fba7fc7eSJung-uk Kim } 690fba7fc7eSJung-uk Kim 691fba7fc7eSJung-uk Kim /* Create/Open a C include output file if asked */ 692fba7fc7eSJung-uk Kim 693fba7fc7eSJung-uk Kim if (Gbl_C_IncludeOutputFlag) 694fba7fc7eSJung-uk Kim { 695fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE); 696fba7fc7eSJung-uk Kim if (!Filename) 697fba7fc7eSJung-uk Kim { 698fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 699fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 700fba7fc7eSJung-uk Kim return (AE_ERROR); 701fba7fc7eSJung-uk Kim } 702fba7fc7eSJung-uk Kim 703fba7fc7eSJung-uk Kim /* Open the C include file, text mode */ 704fba7fc7eSJung-uk Kim 705f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+t"); 706fba7fc7eSJung-uk Kim 707fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n"); 708fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT); 709fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT); 710fba7fc7eSJung-uk Kim } 711fba7fc7eSJung-uk Kim 712fba7fc7eSJung-uk Kim /* Create a namespace output file if asked */ 713fba7fc7eSJung-uk Kim 714fba7fc7eSJung-uk Kim if (Gbl_NsOutputFlag) 715fba7fc7eSJung-uk Kim { 716fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE); 717fba7fc7eSJung-uk Kim if (!Filename) 718fba7fc7eSJung-uk Kim { 719fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 720fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 721fba7fc7eSJung-uk Kim return (AE_ERROR); 722fba7fc7eSJung-uk Kim } 723fba7fc7eSJung-uk Kim 724fba7fc7eSJung-uk Kim /* Open the namespace file, text mode */ 725fba7fc7eSJung-uk Kim 726f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+t"); 727fba7fc7eSJung-uk Kim 728fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT); 729fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT); 730fba7fc7eSJung-uk Kim } 731fba7fc7eSJung-uk Kim 732fba7fc7eSJung-uk Kim return (AE_OK); 733fba7fc7eSJung-uk Kim } 734fba7fc7eSJung-uk Kim 735fba7fc7eSJung-uk Kim 736fba7fc7eSJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 737fba7fc7eSJung-uk Kim /******************************************************************************* 738fba7fc7eSJung-uk Kim * 73953289f6aSNate Lawson * FUNCTION: FlParseInputPathname 74053289f6aSNate Lawson * 74153289f6aSNate Lawson * PARAMETERS: InputFilename - The user-specified ASL source file to be 74253289f6aSNate Lawson * compiled 74353289f6aSNate Lawson * 74453289f6aSNate Lawson * RETURN: Status 74553289f6aSNate Lawson * 74653289f6aSNate Lawson * DESCRIPTION: Split the input path into a directory and filename part 74753289f6aSNate Lawson * 1) Directory part used to open include files 74853289f6aSNate Lawson * 2) Filename part used to generate output filenames 74953289f6aSNate Lawson * 75053289f6aSNate Lawson ******************************************************************************/ 75153289f6aSNate Lawson 75253289f6aSNate Lawson ACPI_STATUS 75353289f6aSNate Lawson FlParseInputPathname ( 75453289f6aSNate Lawson char *InputFilename) 75553289f6aSNate Lawson { 75653289f6aSNate Lawson char *Substring; 75753289f6aSNate Lawson 75853289f6aSNate Lawson 75953289f6aSNate Lawson if (!InputFilename) 76053289f6aSNate Lawson { 76153289f6aSNate Lawson return (AE_OK); 76253289f6aSNate Lawson } 76353289f6aSNate Lawson 76453289f6aSNate Lawson /* Get the path to the input filename's directory */ 76553289f6aSNate Lawson 76653289f6aSNate Lawson Gbl_DirectoryPath = strdup (InputFilename); 76753289f6aSNate Lawson if (!Gbl_DirectoryPath) 76853289f6aSNate Lawson { 76953289f6aSNate Lawson return (AE_NO_MEMORY); 77053289f6aSNate Lawson } 77153289f6aSNate Lawson 77253289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '\\'); 77353289f6aSNate Lawson if (!Substring) 77453289f6aSNate Lawson { 77553289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '/'); 77653289f6aSNate Lawson if (!Substring) 77753289f6aSNate Lawson { 77853289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, ':'); 77953289f6aSNate Lawson } 78053289f6aSNate Lawson } 78153289f6aSNate Lawson 78253289f6aSNate Lawson if (!Substring) 78353289f6aSNate Lawson { 78453289f6aSNate Lawson Gbl_DirectoryPath[0] = 0; 78553289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 78653289f6aSNate Lawson { 78753289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (InputFilename); 78853289f6aSNate Lawson } 78953289f6aSNate Lawson } 79053289f6aSNate Lawson else 79153289f6aSNate Lawson { 79253289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 79353289f6aSNate Lawson { 79453289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (Substring + 1); 79553289f6aSNate Lawson } 79653289f6aSNate Lawson *(Substring+1) = 0; 79753289f6aSNate Lawson } 79853289f6aSNate Lawson 79953289f6aSNate Lawson return (AE_OK); 80053289f6aSNate Lawson } 801fba7fc7eSJung-uk Kim #endif 802