153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 3efcc2a30SJung-uk Kim * Module Name: aslfiles - File support functions 453289f6aSNate Lawson * 553289f6aSNate Lawson *****************************************************************************/ 653289f6aSNate Lawson 7d244b227SJung-uk Kim /* 8313a0c13SJung-uk Kim * Copyright (C) 2000 - 2014, 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 110313a0c13SJung-uk Kim /* No need to free any existing filename */ 111313a0c13SJung-uk Kim 112eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 11353289f6aSNate Lawson } 11453289f6aSNate Lawson 11553289f6aSNate Lawson 11653289f6aSNate Lawson /******************************************************************************* 11753289f6aSNate Lawson * 118d6dd1baeSJung-uk Kim * FUNCTION: FlAddIncludeDirectory 119d6dd1baeSJung-uk Kim * 120d6dd1baeSJung-uk Kim * PARAMETERS: Dir - Directory pathname string 121d6dd1baeSJung-uk Kim * 122d6dd1baeSJung-uk Kim * RETURN: None 123d6dd1baeSJung-uk Kim * 124d6dd1baeSJung-uk Kim * DESCRIPTION: Add a directory the list of include prefix directories. 125d6dd1baeSJung-uk Kim * 126d6dd1baeSJung-uk Kim ******************************************************************************/ 127d6dd1baeSJung-uk Kim 128d6dd1baeSJung-uk Kim void 129d6dd1baeSJung-uk Kim FlAddIncludeDirectory ( 130d6dd1baeSJung-uk Kim char *Dir) 131d6dd1baeSJung-uk Kim { 132d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NewDir; 133d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 134d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *PrevDir = NULL; 135d6dd1baeSJung-uk Kim UINT32 NeedsSeparator = 0; 136d6dd1baeSJung-uk Kim size_t DirLength; 137d6dd1baeSJung-uk Kim 138d6dd1baeSJung-uk Kim 139d6dd1baeSJung-uk Kim DirLength = strlen (Dir); 140d6dd1baeSJung-uk Kim if (!DirLength) 141d6dd1baeSJung-uk Kim { 142d6dd1baeSJung-uk Kim return; 143d6dd1baeSJung-uk Kim } 144d6dd1baeSJung-uk Kim 145d6dd1baeSJung-uk Kim /* Make sure that the pathname ends with a path separator */ 146d6dd1baeSJung-uk Kim 147d6dd1baeSJung-uk Kim if ((Dir[DirLength-1] != '/') && 148d6dd1baeSJung-uk Kim (Dir[DirLength-1] != '\\')) 149d6dd1baeSJung-uk Kim { 150d6dd1baeSJung-uk Kim NeedsSeparator = 1; 151d6dd1baeSJung-uk Kim } 152d6dd1baeSJung-uk Kim 153d6dd1baeSJung-uk Kim NewDir = ACPI_ALLOCATE_ZEROED (sizeof (ASL_INCLUDE_DIR)); 154d6dd1baeSJung-uk Kim NewDir->Dir = ACPI_ALLOCATE (DirLength + 1 + NeedsSeparator); 155d6dd1baeSJung-uk Kim strcpy (NewDir->Dir, Dir); 156d6dd1baeSJung-uk Kim if (NeedsSeparator) 157d6dd1baeSJung-uk Kim { 158d6dd1baeSJung-uk Kim strcat (NewDir->Dir, "/"); 159d6dd1baeSJung-uk Kim } 160d6dd1baeSJung-uk Kim 161d6dd1baeSJung-uk Kim /* 162d6dd1baeSJung-uk Kim * Preserve command line ordering of -I options by adding new elements 163d6dd1baeSJung-uk Kim * at the end of the list 164d6dd1baeSJung-uk Kim */ 165d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 166d6dd1baeSJung-uk Kim while (NextDir) 167d6dd1baeSJung-uk Kim { 168d6dd1baeSJung-uk Kim PrevDir = NextDir; 169d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 170d6dd1baeSJung-uk Kim } 171d6dd1baeSJung-uk Kim 172d6dd1baeSJung-uk Kim if (PrevDir) 173d6dd1baeSJung-uk Kim { 174d6dd1baeSJung-uk Kim PrevDir->Next = NewDir; 175d6dd1baeSJung-uk Kim } 176d6dd1baeSJung-uk Kim else 177d6dd1baeSJung-uk Kim { 178d6dd1baeSJung-uk Kim Gbl_IncludeDirList = NewDir; 179d6dd1baeSJung-uk Kim } 180d6dd1baeSJung-uk Kim } 181d6dd1baeSJung-uk Kim 182d6dd1baeSJung-uk Kim 183d6dd1baeSJung-uk Kim /******************************************************************************* 184d6dd1baeSJung-uk Kim * 185a7a3b383SJung-uk Kim * FUNCTION: FlMergePathnames 186a7a3b383SJung-uk Kim * 187a7a3b383SJung-uk Kim * PARAMETERS: PrefixDir - Prefix directory pathname. Can be NULL or 188a7a3b383SJung-uk Kim * a zero length string. 189a7a3b383SJung-uk Kim * FilePathname - The include filename from the source ASL. 190a7a3b383SJung-uk Kim * 191a7a3b383SJung-uk Kim * RETURN: Merged pathname string 192a7a3b383SJung-uk Kim * 193a7a3b383SJung-uk Kim * DESCRIPTION: Merge two pathnames that (probably) have common elements, to 194a7a3b383SJung-uk Kim * arrive at a minimal length string. Merge can occur if the 195a7a3b383SJung-uk Kim * FilePathname is relative to the PrefixDir. 196a7a3b383SJung-uk Kim * 197a7a3b383SJung-uk Kim ******************************************************************************/ 198a7a3b383SJung-uk Kim 199a7a3b383SJung-uk Kim char * 200a7a3b383SJung-uk Kim FlMergePathnames ( 201a7a3b383SJung-uk Kim char *PrefixDir, 202a7a3b383SJung-uk Kim char *FilePathname) 203a7a3b383SJung-uk Kim { 204a7a3b383SJung-uk Kim char *CommonPath; 205a7a3b383SJung-uk Kim char *Pathname; 206a7a3b383SJung-uk Kim char *LastElement; 207a7a3b383SJung-uk Kim 208a7a3b383SJung-uk Kim 209a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Prefix path - \"%s\"\n" 210a7a3b383SJung-uk Kim "Include: FilePathname - \"%s\"\n", 211a7a3b383SJung-uk Kim PrefixDir, FilePathname); 212a7a3b383SJung-uk Kim 213a7a3b383SJung-uk Kim /* 214a7a3b383SJung-uk Kim * If there is no prefix directory or if the file pathname is absolute, 215a7a3b383SJung-uk Kim * just return the original file pathname 216a7a3b383SJung-uk Kim */ 217a7a3b383SJung-uk Kim if (!PrefixDir || (!*PrefixDir) || 218a7a3b383SJung-uk Kim (*FilePathname == '/') || 219a7a3b383SJung-uk Kim (FilePathname[1] == ':')) 220a7a3b383SJung-uk Kim { 221313a0c13SJung-uk Kim Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1); 222a7a3b383SJung-uk Kim strcpy (Pathname, FilePathname); 223a7a3b383SJung-uk Kim goto ConvertBackslashes; 224a7a3b383SJung-uk Kim } 225a7a3b383SJung-uk Kim 226a7a3b383SJung-uk Kim /* Need a local copy of the prefix directory path */ 227a7a3b383SJung-uk Kim 228313a0c13SJung-uk Kim CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1); 229a7a3b383SJung-uk Kim strcpy (CommonPath, PrefixDir); 230a7a3b383SJung-uk Kim 231a7a3b383SJung-uk Kim /* 232a7a3b383SJung-uk Kim * Walk forward through the file path, and simultaneously backward 233a7a3b383SJung-uk Kim * through the prefix directory path until there are no more 234a7a3b383SJung-uk Kim * relative references at the start of the file path. 235a7a3b383SJung-uk Kim */ 236a7a3b383SJung-uk Kim while (*FilePathname && (!strncmp (FilePathname, "../", 3))) 237a7a3b383SJung-uk Kim { 238a7a3b383SJung-uk Kim /* Remove last element of the prefix directory path */ 239a7a3b383SJung-uk Kim 240a7a3b383SJung-uk Kim LastElement = strrchr (CommonPath, '/'); 241a7a3b383SJung-uk Kim if (!LastElement) 242a7a3b383SJung-uk Kim { 243a7a3b383SJung-uk Kim goto ConcatenatePaths; 244a7a3b383SJung-uk Kim } 245a7a3b383SJung-uk Kim 246a7a3b383SJung-uk Kim *LastElement = 0; /* Terminate CommonPath string */ 247a7a3b383SJung-uk Kim FilePathname += 3; /* Point to next path element */ 248a7a3b383SJung-uk Kim } 249a7a3b383SJung-uk Kim 250a7a3b383SJung-uk Kim /* 251a7a3b383SJung-uk Kim * Remove the last element of the prefix directory path (it is the same as 252a7a3b383SJung-uk Kim * the first element of the file pathname), and build the final merged 253a7a3b383SJung-uk Kim * pathname. 254a7a3b383SJung-uk Kim */ 255a7a3b383SJung-uk Kim LastElement = strrchr (CommonPath, '/'); 256a7a3b383SJung-uk Kim if (LastElement) 257a7a3b383SJung-uk Kim { 258a7a3b383SJung-uk Kim *LastElement = 0; 259a7a3b383SJung-uk Kim } 260a7a3b383SJung-uk Kim 261a7a3b383SJung-uk Kim /* Build the final merged pathname */ 262a7a3b383SJung-uk Kim 263a7a3b383SJung-uk Kim ConcatenatePaths: 264313a0c13SJung-uk Kim Pathname = UtStringCacheCalloc (strlen (CommonPath) + strlen (FilePathname) + 2); 265a7a3b383SJung-uk Kim if (LastElement && *CommonPath) 266a7a3b383SJung-uk Kim { 267a7a3b383SJung-uk Kim strcpy (Pathname, CommonPath); 268a7a3b383SJung-uk Kim strcat (Pathname, "/"); 269a7a3b383SJung-uk Kim } 270a7a3b383SJung-uk Kim strcat (Pathname, FilePathname); 271a7a3b383SJung-uk Kim 272a7a3b383SJung-uk Kim /* Convert all backslashes to normal slashes */ 273a7a3b383SJung-uk Kim 274a7a3b383SJung-uk Kim ConvertBackslashes: 275a7a3b383SJung-uk Kim UtConvertBackslashes (Pathname); 276a7a3b383SJung-uk Kim 277a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Merged Pathname - \"%s\"\n", 278a7a3b383SJung-uk Kim Pathname); 279a7a3b383SJung-uk Kim return (Pathname); 280a7a3b383SJung-uk Kim } 281a7a3b383SJung-uk Kim 282a7a3b383SJung-uk Kim 283a7a3b383SJung-uk Kim /******************************************************************************* 284a7a3b383SJung-uk Kim * 285d6dd1baeSJung-uk Kim * FUNCTION: FlOpenIncludeWithPrefix 286d6dd1baeSJung-uk Kim * 287d6dd1baeSJung-uk Kim * PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero 288d6dd1baeSJung-uk Kim * length string. 289d6dd1baeSJung-uk Kim * Filename - The include filename from the source ASL. 290d6dd1baeSJung-uk Kim * 291d6dd1baeSJung-uk Kim * RETURN: Valid file descriptor if successful. Null otherwise. 292d6dd1baeSJung-uk Kim * 293d6dd1baeSJung-uk Kim * DESCRIPTION: Open an include file and push it on the input file stack. 294d6dd1baeSJung-uk Kim * 295d6dd1baeSJung-uk Kim ******************************************************************************/ 296d6dd1baeSJung-uk Kim 2974c52cad2SJung-uk Kim FILE * 298d6dd1baeSJung-uk Kim FlOpenIncludeWithPrefix ( 299d6dd1baeSJung-uk Kim char *PrefixDir, 300d6dd1baeSJung-uk Kim char *Filename) 301d6dd1baeSJung-uk Kim { 302d6dd1baeSJung-uk Kim FILE *IncludeFile; 303d6dd1baeSJung-uk Kim char *Pathname; 304d6dd1baeSJung-uk Kim 305d6dd1baeSJung-uk Kim 306d6dd1baeSJung-uk Kim /* Build the full pathname to the file */ 307d6dd1baeSJung-uk Kim 308a7a3b383SJung-uk Kim Pathname = FlMergePathnames (PrefixDir, Filename); 309d6dd1baeSJung-uk Kim 310a7a3b383SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "Include: Opening file - \"%s\"\n\n", 311d6dd1baeSJung-uk Kim Pathname); 312d6dd1baeSJung-uk Kim 313d6dd1baeSJung-uk Kim /* Attempt to open the file, push if successful */ 314d6dd1baeSJung-uk Kim 315d6dd1baeSJung-uk Kim IncludeFile = fopen (Pathname, "r"); 316ed17e06eSJung-uk Kim if (!IncludeFile) 317d6dd1baeSJung-uk Kim { 318ed17e06eSJung-uk Kim fprintf (stderr, "Could not open include file %s\n", Pathname); 319ed17e06eSJung-uk Kim ACPI_FREE (Pathname); 320ed17e06eSJung-uk Kim return (NULL); 321ed17e06eSJung-uk Kim } 322ed17e06eSJung-uk Kim 323d6dd1baeSJung-uk Kim /* Push the include file on the open input file stack */ 324d6dd1baeSJung-uk Kim 325d6dd1baeSJung-uk Kim AslPushInputFileStack (IncludeFile, Pathname); 326d6dd1baeSJung-uk Kim return (IncludeFile); 327d6dd1baeSJung-uk Kim } 328d6dd1baeSJung-uk Kim 329d6dd1baeSJung-uk Kim 330d6dd1baeSJung-uk Kim /******************************************************************************* 331d6dd1baeSJung-uk Kim * 33253289f6aSNate Lawson * FUNCTION: FlOpenIncludeFile 33353289f6aSNate Lawson * 33453289f6aSNate Lawson * PARAMETERS: Op - Parse node for the INCLUDE ASL statement 33553289f6aSNate Lawson * 33653289f6aSNate Lawson * RETURN: None. 33753289f6aSNate Lawson * 33853289f6aSNate Lawson * DESCRIPTION: Open an include file and push it on the input file stack. 33953289f6aSNate Lawson * 34053289f6aSNate Lawson ******************************************************************************/ 34153289f6aSNate Lawson 34253289f6aSNate Lawson void 34353289f6aSNate Lawson FlOpenIncludeFile ( 34453289f6aSNate Lawson ACPI_PARSE_OBJECT *Op) 34553289f6aSNate Lawson { 346d6dd1baeSJung-uk Kim FILE *IncludeFile; 347d6dd1baeSJung-uk Kim ASL_INCLUDE_DIR *NextDir; 34853289f6aSNate Lawson 34953289f6aSNate Lawson 35053289f6aSNate Lawson /* Op must be valid */ 35153289f6aSNate Lawson 35253289f6aSNate Lawson if (!Op) 35353289f6aSNate Lawson { 35453289f6aSNate Lawson AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, 35553289f6aSNate Lawson Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 35653289f6aSNate Lawson Gbl_InputByteCount, Gbl_CurrentColumn, 35753289f6aSNate Lawson Gbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node"); 35853289f6aSNate Lawson 35953289f6aSNate Lawson return; 36053289f6aSNate Lawson } 36153289f6aSNate Lawson 36253289f6aSNate Lawson /* 36353289f6aSNate Lawson * Flush out the "include ()" statement on this line, start 36453289f6aSNate Lawson * the actual include file on the next line 36553289f6aSNate Lawson */ 366eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 36753289f6aSNate Lawson FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n"); 36853289f6aSNate Lawson Gbl_CurrentLineOffset++; 36953289f6aSNate Lawson 37053289f6aSNate Lawson 371d6dd1baeSJung-uk Kim /* Attempt to open the include file */ 372d6dd1baeSJung-uk Kim 373d6dd1baeSJung-uk Kim /* If the file specifies an absolute path, just open it */ 374d6dd1baeSJung-uk Kim 375d6dd1baeSJung-uk Kim if ((Op->Asl.Value.String[0] == '/') || 376d6dd1baeSJung-uk Kim (Op->Asl.Value.String[0] == '\\') || 377d6dd1baeSJung-uk Kim (Op->Asl.Value.String[1] == ':')) 37853289f6aSNate Lawson { 379d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String); 380d6dd1baeSJung-uk Kim if (!IncludeFile) 381d6dd1baeSJung-uk Kim { 382d6dd1baeSJung-uk Kim goto ErrorExit; 383d6dd1baeSJung-uk Kim } 38453289f6aSNate Lawson return; 38553289f6aSNate Lawson } 38653289f6aSNate Lawson 387d6dd1baeSJung-uk Kim /* 388d6dd1baeSJung-uk Kim * The include filename is not an absolute path. 389d6dd1baeSJung-uk Kim * 390d6dd1baeSJung-uk Kim * First, search for the file within the "local" directory -- meaning 391d6dd1baeSJung-uk Kim * the same directory that contains the source file. 392d6dd1baeSJung-uk Kim * 393d6dd1baeSJung-uk Kim * Construct the file pathname from the global directory name. 394d6dd1baeSJung-uk Kim */ 395d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String); 396d6dd1baeSJung-uk Kim if (IncludeFile) 397d6dd1baeSJung-uk Kim { 398d6dd1baeSJung-uk Kim return; 399d6dd1baeSJung-uk Kim } 40053289f6aSNate Lawson 401d6dd1baeSJung-uk Kim /* 402d6dd1baeSJung-uk Kim * Second, search for the file within the (possibly multiple) directories 403d6dd1baeSJung-uk Kim * specified by the -I option on the command line. 404d6dd1baeSJung-uk Kim */ 405d6dd1baeSJung-uk Kim NextDir = Gbl_IncludeDirList; 406d6dd1baeSJung-uk Kim while (NextDir) 407d6dd1baeSJung-uk Kim { 408d6dd1baeSJung-uk Kim IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String); 409d6dd1baeSJung-uk Kim if (IncludeFile) 410d6dd1baeSJung-uk Kim { 411d6dd1baeSJung-uk Kim return; 412d6dd1baeSJung-uk Kim } 413d6dd1baeSJung-uk Kim 414d6dd1baeSJung-uk Kim NextDir = NextDir->Next; 415d6dd1baeSJung-uk Kim } 416d6dd1baeSJung-uk Kim 417d6dd1baeSJung-uk Kim /* We could not open the include file after trying very hard */ 418d6dd1baeSJung-uk Kim 419d6dd1baeSJung-uk Kim ErrorExit: 420d6dd1baeSJung-uk Kim sprintf (MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno)); 421d6dd1baeSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer); 42253289f6aSNate Lawson } 42353289f6aSNate Lawson 42453289f6aSNate Lawson 42553289f6aSNate Lawson /******************************************************************************* 42653289f6aSNate Lawson * 427fba7fc7eSJung-uk Kim * FUNCTION: FlOpenInputFile 428fba7fc7eSJung-uk Kim * 429fba7fc7eSJung-uk Kim * PARAMETERS: InputFilename - The user-specified ASL source file to be 430fba7fc7eSJung-uk Kim * compiled 431fba7fc7eSJung-uk Kim * 432fba7fc7eSJung-uk Kim * RETURN: Status 433fba7fc7eSJung-uk Kim * 434fba7fc7eSJung-uk Kim * DESCRIPTION: Open the specified input file, and save the directory path to 435fba7fc7eSJung-uk Kim * the file so that include files can be opened in 436fba7fc7eSJung-uk Kim * the same directory. 437fba7fc7eSJung-uk Kim * 438fba7fc7eSJung-uk Kim ******************************************************************************/ 439fba7fc7eSJung-uk Kim 440fba7fc7eSJung-uk Kim ACPI_STATUS 441fba7fc7eSJung-uk Kim FlOpenInputFile ( 442fba7fc7eSJung-uk Kim char *InputFilename) 443fba7fc7eSJung-uk Kim { 444fba7fc7eSJung-uk Kim 445fba7fc7eSJung-uk Kim /* Open the input ASL file, text mode */ 446fba7fc7eSJung-uk Kim 447f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_INPUT, InputFilename, "rt"); 448fba7fc7eSJung-uk Kim AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle; 449fba7fc7eSJung-uk Kim 450fba7fc7eSJung-uk Kim return (AE_OK); 451fba7fc7eSJung-uk Kim } 452fba7fc7eSJung-uk Kim 453fba7fc7eSJung-uk Kim 454fba7fc7eSJung-uk Kim /******************************************************************************* 455fba7fc7eSJung-uk Kim * 456fba7fc7eSJung-uk Kim * FUNCTION: FlOpenAmlOutputFile 457fba7fc7eSJung-uk Kim * 458fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 459fba7fc7eSJung-uk Kim * 460fba7fc7eSJung-uk Kim * RETURN: Status 461fba7fc7eSJung-uk Kim * 462fba7fc7eSJung-uk Kim * DESCRIPTION: Create the output filename (*.AML) and open the file. The file 463fba7fc7eSJung-uk Kim * is created in the same directory as the parent input file. 464fba7fc7eSJung-uk Kim * 465fba7fc7eSJung-uk Kim ******************************************************************************/ 466fba7fc7eSJung-uk Kim 467fba7fc7eSJung-uk Kim ACPI_STATUS 468fba7fc7eSJung-uk Kim FlOpenAmlOutputFile ( 469fba7fc7eSJung-uk Kim char *FilenamePrefix) 470fba7fc7eSJung-uk Kim { 471fba7fc7eSJung-uk Kim char *Filename; 472fba7fc7eSJung-uk Kim 473fba7fc7eSJung-uk Kim 474fba7fc7eSJung-uk Kim /* Output filename usually comes from the ASL itself */ 475fba7fc7eSJung-uk Kim 476fba7fc7eSJung-uk Kim Filename = Gbl_Files[ASL_FILE_AML_OUTPUT].Filename; 477fba7fc7eSJung-uk Kim if (!Filename) 478fba7fc7eSJung-uk Kim { 479fba7fc7eSJung-uk Kim /* Create the output AML filename */ 480fba7fc7eSJung-uk Kim 481fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE); 482fba7fc7eSJung-uk Kim if (!Filename) 483fba7fc7eSJung-uk Kim { 484fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME, 485fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 486fba7fc7eSJung-uk Kim return (AE_ERROR); 487fba7fc7eSJung-uk Kim } 488fba7fc7eSJung-uk Kim } 489fba7fc7eSJung-uk Kim 490fba7fc7eSJung-uk Kim /* Open the output AML file in binary mode */ 491fba7fc7eSJung-uk Kim 492fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_AML_OUTPUT, Filename, "w+b"); 493fba7fc7eSJung-uk Kim return (AE_OK); 494fba7fc7eSJung-uk Kim } 495fba7fc7eSJung-uk Kim 496fba7fc7eSJung-uk Kim 497fba7fc7eSJung-uk Kim /******************************************************************************* 498fba7fc7eSJung-uk Kim * 499fba7fc7eSJung-uk Kim * FUNCTION: FlOpenMiscOutputFiles 500fba7fc7eSJung-uk Kim * 501fba7fc7eSJung-uk Kim * PARAMETERS: FilenamePrefix - The user-specified ASL source file 502fba7fc7eSJung-uk Kim * 503fba7fc7eSJung-uk Kim * RETURN: Status 504fba7fc7eSJung-uk Kim * 505fba7fc7eSJung-uk Kim * DESCRIPTION: Create and open the various output files needed, depending on 506fba7fc7eSJung-uk Kim * the command line options 507fba7fc7eSJung-uk Kim * 508fba7fc7eSJung-uk Kim ******************************************************************************/ 509fba7fc7eSJung-uk Kim 510fba7fc7eSJung-uk Kim ACPI_STATUS 511fba7fc7eSJung-uk Kim FlOpenMiscOutputFiles ( 512fba7fc7eSJung-uk Kim char *FilenamePrefix) 513fba7fc7eSJung-uk Kim { 514fba7fc7eSJung-uk Kim char *Filename; 515fba7fc7eSJung-uk Kim 516fba7fc7eSJung-uk Kim 5179c48c75eSJung-uk Kim /* All done for disassembler */ 5189c48c75eSJung-uk Kim 5199c48c75eSJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ACPI_TABLE) 5209c48c75eSJung-uk Kim { 5219c48c75eSJung-uk Kim return (AE_OK); 5229c48c75eSJung-uk Kim } 5239c48c75eSJung-uk Kim 524a88e22b7SJung-uk Kim /* Create/Open a hex output file if asked */ 525a88e22b7SJung-uk Kim 526a88e22b7SJung-uk Kim if (Gbl_HexOutputFlag) 527a88e22b7SJung-uk Kim { 528a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP); 529a88e22b7SJung-uk Kim if (!Filename) 530a88e22b7SJung-uk Kim { 531a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 532a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 533a88e22b7SJung-uk Kim return (AE_ERROR); 534a88e22b7SJung-uk Kim } 535a88e22b7SJung-uk Kim 536a88e22b7SJung-uk Kim /* Open the hex file, text mode */ 537a88e22b7SJung-uk Kim 538f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+t"); 539a88e22b7SJung-uk Kim 540a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_HEX_OUTPUT); 541a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT); 542a88e22b7SJung-uk Kim } 543a88e22b7SJung-uk Kim 544a88e22b7SJung-uk Kim /* Create/Open a debug output file if asked */ 545a88e22b7SJung-uk Kim 546a88e22b7SJung-uk Kim if (Gbl_DebugFlag) 547a88e22b7SJung-uk Kim { 548a88e22b7SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG); 549a88e22b7SJung-uk Kim if (!Filename) 550a88e22b7SJung-uk Kim { 551a88e22b7SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 552a88e22b7SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 553a88e22b7SJung-uk Kim return (AE_ERROR); 554a88e22b7SJung-uk Kim } 555a88e22b7SJung-uk Kim 556a88e22b7SJung-uk Kim /* Open the debug file as STDERR, text mode */ 557a88e22b7SJung-uk Kim 558a88e22b7SJung-uk Kim /* TBD: hide this behind a FlReopenFile function */ 559a88e22b7SJung-uk Kim 560a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename; 561a88e22b7SJung-uk Kim Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = 562a88e22b7SJung-uk Kim freopen (Filename, "w+t", stderr); 563a88e22b7SJung-uk Kim 5644c52cad2SJung-uk Kim if (!Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle) 5654c52cad2SJung-uk Kim { 5664c52cad2SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 5674c52cad2SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 5684c52cad2SJung-uk Kim return (AE_ERROR); 5694c52cad2SJung-uk Kim } 5704c52cad2SJung-uk Kim 571a88e22b7SJung-uk Kim AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT); 572a88e22b7SJung-uk Kim AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT); 573a88e22b7SJung-uk Kim } 574a88e22b7SJung-uk Kim 575d244b227SJung-uk Kim /* Create/Open a listing output file if asked */ 576d244b227SJung-uk Kim 577d244b227SJung-uk Kim if (Gbl_ListingFlag) 578d244b227SJung-uk Kim { 579d244b227SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING); 580d244b227SJung-uk Kim if (!Filename) 581d244b227SJung-uk Kim { 582d244b227SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 583d244b227SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 584d244b227SJung-uk Kim return (AE_ERROR); 585d244b227SJung-uk Kim } 586d244b227SJung-uk Kim 587d244b227SJung-uk Kim /* Open the listing file, text mode */ 588d244b227SJung-uk Kim 589f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+t"); 590d244b227SJung-uk Kim 591d244b227SJung-uk Kim AslCompilerSignon (ASL_FILE_LISTING_OUTPUT); 592d244b227SJung-uk Kim AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT); 593d244b227SJung-uk Kim } 594d244b227SJung-uk Kim 595eef1b955SJung-uk Kim /* Create the preprocessor output file if preprocessor enabled */ 5964c52cad2SJung-uk Kim 597eef1b955SJung-uk Kim if (Gbl_PreprocessFlag) 598eef1b955SJung-uk Kim { 5994c52cad2SJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_PREPROCESSOR); 6004c52cad2SJung-uk Kim if (!Filename) 6014c52cad2SJung-uk Kim { 6024c52cad2SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_PREPROCESSOR_FILENAME, 6034c52cad2SJung-uk Kim 0, 0, 0, 0, NULL, NULL); 6044c52cad2SJung-uk Kim return (AE_ERROR); 6054c52cad2SJung-uk Kim } 6064c52cad2SJung-uk Kim 607f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t"); 608eef1b955SJung-uk Kim } 6094c52cad2SJung-uk Kim 6104c52cad2SJung-uk Kim /* All done for data table compiler */ 6114c52cad2SJung-uk Kim 612a88e22b7SJung-uk Kim if (Gbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) 613a88e22b7SJung-uk Kim { 614a88e22b7SJung-uk Kim return (AE_OK); 615a88e22b7SJung-uk Kim } 616a88e22b7SJung-uk Kim 617fba7fc7eSJung-uk Kim /* Create/Open a combined source output file */ 618fba7fc7eSJung-uk Kim 619fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE); 620fba7fc7eSJung-uk Kim if (!Filename) 621fba7fc7eSJung-uk Kim { 622fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 623fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 624fba7fc7eSJung-uk Kim return (AE_ERROR); 625fba7fc7eSJung-uk Kim } 626fba7fc7eSJung-uk Kim 627fba7fc7eSJung-uk Kim /* 628fba7fc7eSJung-uk Kim * Open the source output file, binary mode (so that LF does not get 629fba7fc7eSJung-uk Kim * expanded to CR/LF on some systems, messing up our seek 630fba7fc7eSJung-uk Kim * calculations.) 631fba7fc7eSJung-uk Kim */ 632fba7fc7eSJung-uk Kim FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b"); 633fba7fc7eSJung-uk Kim 6344c52cad2SJung-uk Kim /* 6354c52cad2SJung-uk Kim // TBD: TEMP 6364c52cad2SJung-uk Kim // AslCompilerin = Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle; 6374c52cad2SJung-uk Kim */ 638fba7fc7eSJung-uk Kim /* Create/Open a assembly code source output file if asked */ 639fba7fc7eSJung-uk Kim 640fba7fc7eSJung-uk Kim if (Gbl_AsmOutputFlag) 641fba7fc7eSJung-uk Kim { 642fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE); 643fba7fc7eSJung-uk Kim if (!Filename) 644fba7fc7eSJung-uk Kim { 645fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 646fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 647fba7fc7eSJung-uk Kim return (AE_ERROR); 648fba7fc7eSJung-uk Kim } 649fba7fc7eSJung-uk Kim 650fba7fc7eSJung-uk Kim /* Open the assembly code source file, text mode */ 651fba7fc7eSJung-uk Kim 652f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+t"); 653fba7fc7eSJung-uk Kim 654fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT); 655fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT); 656fba7fc7eSJung-uk Kim } 657fba7fc7eSJung-uk Kim 658fba7fc7eSJung-uk Kim /* Create/Open a C code source output file if asked */ 659fba7fc7eSJung-uk Kim 660fba7fc7eSJung-uk Kim if (Gbl_C_OutputFlag) 661fba7fc7eSJung-uk Kim { 662fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE); 663fba7fc7eSJung-uk Kim if (!Filename) 664fba7fc7eSJung-uk Kim { 665fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 666fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 667fba7fc7eSJung-uk Kim return (AE_ERROR); 668fba7fc7eSJung-uk Kim } 669fba7fc7eSJung-uk Kim 670fba7fc7eSJung-uk Kim /* Open the C code source file, text mode */ 671fba7fc7eSJung-uk Kim 672f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+t"); 673fba7fc7eSJung-uk Kim 674fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n"); 675fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT); 676fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT); 677fba7fc7eSJung-uk Kim } 678fba7fc7eSJung-uk Kim 6799c7c683cSJung-uk Kim /* Create/Open a C code source output file for the offset table if asked */ 6809c7c683cSJung-uk Kim 6819c7c683cSJung-uk Kim if (Gbl_C_OffsetTableFlag) 6829c7c683cSJung-uk Kim { 6839c7c683cSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_OFFSET); 6849c7c683cSJung-uk Kim if (!Filename) 6859c7c683cSJung-uk Kim { 6869c7c683cSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 6879c7c683cSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 6889c7c683cSJung-uk Kim return (AE_ERROR); 6899c7c683cSJung-uk Kim } 6909c7c683cSJung-uk Kim 6919c7c683cSJung-uk Kim /* Open the C code source file, text mode */ 6929c7c683cSJung-uk Kim 6939c7c683cSJung-uk Kim FlOpenFile (ASL_FILE_C_OFFSET_OUTPUT, Filename, "w+t"); 6949c7c683cSJung-uk Kim 6959c7c683cSJung-uk Kim FlPrintFile (ASL_FILE_C_OFFSET_OUTPUT, "/*\n"); 6969c7c683cSJung-uk Kim AslCompilerSignon (ASL_FILE_C_OFFSET_OUTPUT); 6979c7c683cSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_OFFSET_OUTPUT); 6989c7c683cSJung-uk Kim } 6999c7c683cSJung-uk Kim 700fba7fc7eSJung-uk Kim /* Create/Open a assembly include output file if asked */ 701fba7fc7eSJung-uk Kim 702fba7fc7eSJung-uk Kim if (Gbl_AsmIncludeOutputFlag) 703fba7fc7eSJung-uk Kim { 704fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE); 705fba7fc7eSJung-uk Kim if (!Filename) 706fba7fc7eSJung-uk Kim { 707fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 708fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 709fba7fc7eSJung-uk Kim return (AE_ERROR); 710fba7fc7eSJung-uk Kim } 711fba7fc7eSJung-uk Kim 712fba7fc7eSJung-uk Kim /* Open the assembly include file, text mode */ 713fba7fc7eSJung-uk Kim 714f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+t"); 715fba7fc7eSJung-uk Kim 716fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT); 717fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT); 718fba7fc7eSJung-uk Kim } 719fba7fc7eSJung-uk Kim 720fba7fc7eSJung-uk Kim /* Create/Open a C include output file if asked */ 721fba7fc7eSJung-uk Kim 722fba7fc7eSJung-uk Kim if (Gbl_C_IncludeOutputFlag) 723fba7fc7eSJung-uk Kim { 724fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE); 725fba7fc7eSJung-uk Kim if (!Filename) 726fba7fc7eSJung-uk Kim { 727fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 728fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 729fba7fc7eSJung-uk Kim return (AE_ERROR); 730fba7fc7eSJung-uk Kim } 731fba7fc7eSJung-uk Kim 732fba7fc7eSJung-uk Kim /* Open the C include file, text mode */ 733fba7fc7eSJung-uk Kim 734f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+t"); 735fba7fc7eSJung-uk Kim 736fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n"); 737fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT); 738fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT); 739fba7fc7eSJung-uk Kim } 740fba7fc7eSJung-uk Kim 741fba7fc7eSJung-uk Kim /* Create a namespace output file if asked */ 742fba7fc7eSJung-uk Kim 743fba7fc7eSJung-uk Kim if (Gbl_NsOutputFlag) 744fba7fc7eSJung-uk Kim { 745fba7fc7eSJung-uk Kim Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE); 746fba7fc7eSJung-uk Kim if (!Filename) 747fba7fc7eSJung-uk Kim { 748fba7fc7eSJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 749fba7fc7eSJung-uk Kim 0, 0, 0, 0, NULL, NULL); 750fba7fc7eSJung-uk Kim return (AE_ERROR); 751fba7fc7eSJung-uk Kim } 752fba7fc7eSJung-uk Kim 753fba7fc7eSJung-uk Kim /* Open the namespace file, text mode */ 754fba7fc7eSJung-uk Kim 755f38b0f21SJung-uk Kim FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+t"); 756fba7fc7eSJung-uk Kim 757fba7fc7eSJung-uk Kim AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT); 758fba7fc7eSJung-uk Kim AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT); 759fba7fc7eSJung-uk Kim } 760fba7fc7eSJung-uk Kim 761fba7fc7eSJung-uk Kim return (AE_OK); 762fba7fc7eSJung-uk Kim } 763fba7fc7eSJung-uk Kim 764fba7fc7eSJung-uk Kim 765fba7fc7eSJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 766fba7fc7eSJung-uk Kim /******************************************************************************* 767fba7fc7eSJung-uk Kim * 76853289f6aSNate Lawson * FUNCTION: FlParseInputPathname 76953289f6aSNate Lawson * 77053289f6aSNate Lawson * PARAMETERS: InputFilename - The user-specified ASL source file to be 77153289f6aSNate Lawson * compiled 77253289f6aSNate Lawson * 77353289f6aSNate Lawson * RETURN: Status 77453289f6aSNate Lawson * 77553289f6aSNate Lawson * DESCRIPTION: Split the input path into a directory and filename part 77653289f6aSNate Lawson * 1) Directory part used to open include files 77753289f6aSNate Lawson * 2) Filename part used to generate output filenames 77853289f6aSNate Lawson * 77953289f6aSNate Lawson ******************************************************************************/ 78053289f6aSNate Lawson 78153289f6aSNate Lawson ACPI_STATUS 78253289f6aSNate Lawson FlParseInputPathname ( 78353289f6aSNate Lawson char *InputFilename) 78453289f6aSNate Lawson { 78553289f6aSNate Lawson char *Substring; 78653289f6aSNate Lawson 78753289f6aSNate Lawson 78853289f6aSNate Lawson if (!InputFilename) 78953289f6aSNate Lawson { 79053289f6aSNate Lawson return (AE_OK); 79153289f6aSNate Lawson } 79253289f6aSNate Lawson 79353289f6aSNate Lawson /* Get the path to the input filename's directory */ 79453289f6aSNate Lawson 79553289f6aSNate Lawson Gbl_DirectoryPath = strdup (InputFilename); 79653289f6aSNate Lawson if (!Gbl_DirectoryPath) 79753289f6aSNate Lawson { 79853289f6aSNate Lawson return (AE_NO_MEMORY); 79953289f6aSNate Lawson } 80053289f6aSNate Lawson 80153289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '\\'); 80253289f6aSNate Lawson if (!Substring) 80353289f6aSNate Lawson { 80453289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, '/'); 80553289f6aSNate Lawson if (!Substring) 80653289f6aSNate Lawson { 80753289f6aSNate Lawson Substring = strrchr (Gbl_DirectoryPath, ':'); 80853289f6aSNate Lawson } 80953289f6aSNate Lawson } 81053289f6aSNate Lawson 81153289f6aSNate Lawson if (!Substring) 81253289f6aSNate Lawson { 81353289f6aSNate Lawson Gbl_DirectoryPath[0] = 0; 81453289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 81553289f6aSNate Lawson { 81653289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (InputFilename); 81753289f6aSNate Lawson } 81853289f6aSNate Lawson } 81953289f6aSNate Lawson else 82053289f6aSNate Lawson { 82153289f6aSNate Lawson if (Gbl_UseDefaultAmlFilename) 82253289f6aSNate Lawson { 82353289f6aSNate Lawson Gbl_OutputFilenamePrefix = strdup (Substring + 1); 82453289f6aSNate Lawson } 82553289f6aSNate Lawson *(Substring+1) = 0; 82653289f6aSNate Lawson } 82753289f6aSNate Lawson 828313a0c13SJung-uk Kim UtConvertBackslashes (Gbl_OutputFilenamePrefix); 82953289f6aSNate Lawson return (AE_OK); 83053289f6aSNate Lawson } 831fba7fc7eSJung-uk Kim #endif 832