Sync usage with man page.
[netbsd-mini2440.git] / sys / external / intel-public / acpica / dist / compiler / aslfiles.c
blobcb38e900b0c9a2908fca00ea1be07696d8b932c8
2 /******************************************************************************
4 * Module Name: aslfiles - file I/O suppoert
6 *****************************************************************************/
8 /******************************************************************************
10 * 1. Copyright Notice
12 * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
13 * All rights reserved.
15 * 2. License
17 * 2.1. This is your license from Intel Corp. under its intellectual property
18 * rights. You may have additional license terms from the party that provided
19 * you this software, covering your right to use that party's intellectual
20 * property rights.
22 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23 * copy of the source code appearing in this file ("Covered Code") an
24 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25 * base code distributed originally by Intel ("Original Intel Code") to copy,
26 * make derivatives, distribute, use and display any portion of the Covered
27 * Code in any form, with the right to sublicense such rights; and
29 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30 * license (with the right to sublicense), under only those claims of Intel
31 * patents that are infringed by the Original Intel Code, to make, use, sell,
32 * offer to sell, and import the Covered Code and derivative works thereof
33 * solely to the minimum extent necessary to exercise the above copyright
34 * license, and in no event shall the patent license extend to any additions
35 * to or modifications of the Original Intel Code. No other license or right
36 * is granted directly or by implication, estoppel or otherwise;
38 * The above copyright and patent license is granted only if the following
39 * conditions are met:
41 * 3. Conditions
43 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44 * Redistribution of source code of any substantial portion of the Covered
45 * Code or modification with rights to further distribute source must include
46 * the above Copyright Notice, the above License, this list of Conditions,
47 * and the following Disclaimer and Export Compliance provision. In addition,
48 * Licensee must cause all Covered Code to which Licensee contributes to
49 * contain a file documenting the changes Licensee made to create that Covered
50 * Code and the date of any change. Licensee must include in that file the
51 * documentation of any changes made by any predecessor Licensee. Licensee
52 * must include a prominent statement that the modification is derived,
53 * directly or indirectly, from Original Intel Code.
55 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56 * Redistribution of source code of any substantial portion of the Covered
57 * Code or modification without rights to further distribute source must
58 * include the following Disclaimer and Export Compliance provision in the
59 * documentation and/or other materials provided with distribution. In
60 * addition, Licensee may not authorize further sublicense of source of any
61 * portion of the Covered Code, and must include terms to the effect that the
62 * license from Licensee to its licensee is limited to the intellectual
63 * property embodied in the software Licensee provides to its licensee, and
64 * not to intellectual property embodied in modifications its licensee may
65 * make.
67 * 3.3. Redistribution of Executable. Redistribution in executable form of any
68 * substantial portion of the Covered Code or modification must reproduce the
69 * above Copyright Notice, and the following Disclaimer and Export Compliance
70 * provision in the documentation and/or other materials provided with the
71 * distribution.
73 * 3.4. Intel retains all right, title, and interest in and to the Original
74 * Intel Code.
76 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77 * Intel shall be used in advertising or otherwise to promote the sale, use or
78 * other dealings in products derived from or relating to the Covered Code
79 * without prior written authorization from Intel.
81 * 4. Disclaimer and Export Compliance
83 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
86 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
87 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
88 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89 * PARTICULAR PURPOSE.
91 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
97 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98 * LIMITED REMEDY.
100 * 4.3. Licensee shall not export, either directly or indirectly, any of this
101 * software or system incorporating such software without first obtaining any
102 * required license or other approval from the U. S. Department of Commerce or
103 * any other agency or department of the United States Government. In the
104 * event Licensee exports any such software from the United States or
105 * re-exports any such software from a foreign destination, Licensee shall
106 * ensure that the distribution and export/re-export of the software is in
107 * compliance with all laws, regulations, orders, or other restrictions of the
108 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109 * any of its subsidiaries will export/re-export any technical data, process,
110 * software, or service, directly or indirectly, to any country for which the
111 * United States government or any agency thereof requires an export license,
112 * other governmental approval, or letter of assurance, without first obtaining
113 * such license, approval or letter.
115 *****************************************************************************/
117 #include "aslcompiler.h"
118 #include "acapps.h"
120 #define _COMPONENT ACPI_COMPILER
121 ACPI_MODULE_NAME ("aslfiles")
123 /* Local prototypes */
125 static void
126 FlOpenFile (
127 UINT32 FileId,
128 char *Filename,
129 char *Mode);
131 static FILE *
132 FlOpenLocalFile (
133 char *LocalName,
134 char *Mode);
136 #ifdef ACPI_OBSOLETE_FUNCTIONS
137 ACPI_STATUS
138 FlParseInputPathname (
139 char *InputFilename);
140 #endif
143 /*******************************************************************************
145 * FUNCTION: AslAbort
147 * PARAMETERS: None
149 * RETURN: None
151 * DESCRIPTION: Dump the error log and abort the compiler. Used for serious
152 * I/O errors
154 ******************************************************************************/
156 void
157 AslAbort (
158 void)
161 AePrintErrorLog (ASL_FILE_STDOUT);
162 if (Gbl_DebugFlag)
164 /* Print error summary to the debug file */
166 AePrintErrorLog (ASL_FILE_STDERR);
169 exit (1);
173 /*******************************************************************************
175 * FUNCTION: FlOpenLocalFile
177 * PARAMETERS: LocalName - Single filename (not a pathname)
178 * Mode - Open mode for fopen
180 * RETURN: File descriptor
182 * DESCRIPTION: Build a complete pathname for the input filename and open
183 * the file.
185 ******************************************************************************/
187 static FILE *
188 FlOpenLocalFile (
189 char *LocalName,
190 char *Mode)
193 StringBuffer[0] = 0;
195 /* Check for an absolute pathname */
197 if ((LocalName[0] != '/') && /* Forward slash */
198 (LocalName[0] != '\\') && /* backslash (Win) */
199 (LocalName[1] != ':')) /* Device name (Win) */
201 /* The include file path is relative, prepend the directory path */
203 strcat (StringBuffer, Gbl_DirectoryPath);
205 strcat (StringBuffer, LocalName);
207 DbgPrint (ASL_PARSE_OUTPUT, "FlOpenLocalFile: %s\n", StringBuffer);
208 return (fopen (StringBuffer, (const char *) Mode));
212 /*******************************************************************************
214 * FUNCTION: FlFileError
216 * PARAMETERS: FileId - Index into file info array
217 * ErrorId - Index into error message array
219 * RETURN: None
221 * DESCRIPTION: Decode errno to an error message and add the entire error
222 * to the error log.
224 ******************************************************************************/
226 void
227 FlFileError (
228 UINT32 FileId,
229 UINT8 ErrorId)
232 sprintf (MsgBuffer, "\"%s\" (%s)", Gbl_Files[FileId].Filename,
233 strerror (errno));
234 AslCommonError (ASL_ERROR, ErrorId, 0, 0, 0, 0, NULL, MsgBuffer);
238 /*******************************************************************************
240 * FUNCTION: FlOpenFile
242 * PARAMETERS: FileId - Index into file info array
243 * Filename - file pathname to open
244 * Mode - Open mode for fopen
246 * RETURN: None
248 * DESCRIPTION: Open a file.
249 * NOTE: Aborts compiler on any error.
251 ******************************************************************************/
253 static void
254 FlOpenFile (
255 UINT32 FileId,
256 char *Filename,
257 char *Mode)
259 FILE *File;
262 File = fopen (Filename, Mode);
264 Gbl_Files[FileId].Filename = Filename;
265 Gbl_Files[FileId].Handle = File;
267 if (!File)
269 FlFileError (FileId, ASL_MSG_OPEN);
270 AslAbort ();
275 /*******************************************************************************
277 * FUNCTION: FlReadFile
279 * PARAMETERS: FileId - Index into file info array
280 * Buffer - Where to place the data
281 * Length - Amount to read
283 * RETURN: Status. AE_ERROR indicates EOF.
285 * DESCRIPTION: Read data from an open file.
286 * NOTE: Aborts compiler on any error.
288 ******************************************************************************/
290 ACPI_STATUS
291 FlReadFile (
292 UINT32 FileId,
293 void *Buffer,
294 UINT32 Length)
296 UINT32 Actual;
299 /* Read and check for error */
301 Actual = fread (Buffer, 1, Length, Gbl_Files[FileId].Handle);
302 if (Actual != Length)
304 if (feof (Gbl_Files[FileId].Handle))
306 /* End-of-file, just return error */
308 return (AE_ERROR);
311 FlFileError (FileId, ASL_MSG_READ);
312 AslAbort ();
315 return (AE_OK);
319 /*******************************************************************************
321 * FUNCTION: FlWriteFile
323 * PARAMETERS: FileId - Index into file info array
324 * Buffer - Data to write
325 * Length - Amount of data to write
327 * RETURN: None
329 * DESCRIPTION: Write data to an open file.
330 * NOTE: Aborts compiler on any error.
332 ******************************************************************************/
334 void
335 FlWriteFile (
336 UINT32 FileId,
337 void *Buffer,
338 UINT32 Length)
340 UINT32 Actual;
343 /* Write and check for error */
345 Actual = fwrite ((char *) Buffer, 1, Length, Gbl_Files[FileId].Handle);
346 if (Actual != Length)
348 FlFileError (FileId, ASL_MSG_WRITE);
349 AslAbort ();
354 /*******************************************************************************
356 * FUNCTION: FlPrintFile
358 * PARAMETERS: FileId - Index into file info array
359 * Format - Printf format string
360 * ... - Printf arguments
362 * RETURN: None
364 * DESCRIPTION: Formatted write to an open file.
365 * NOTE: Aborts compiler on any error.
367 ******************************************************************************/
369 void
370 FlPrintFile (
371 UINT32 FileId,
372 char *Format,
373 ...)
375 INT32 Actual;
376 va_list Args;
379 va_start (Args, Format);
381 Actual = vfprintf (Gbl_Files[FileId].Handle, Format, Args);
382 va_end (Args);
384 if (Actual == -1)
386 FlFileError (FileId, ASL_MSG_WRITE);
387 AslAbort ();
392 /*******************************************************************************
394 * FUNCTION: FlSeekFile
396 * PARAMETERS: FileId - Index into file info array
397 * Offset - Absolute byte offset in file
399 * RETURN: None
401 * DESCRIPTION: Seek to absolute offset
402 * NOTE: Aborts compiler on any error.
404 ******************************************************************************/
406 void
407 FlSeekFile (
408 UINT32 FileId,
409 long Offset)
411 int Error;
414 Error = fseek (Gbl_Files[FileId].Handle, Offset, SEEK_SET);
415 if (Error)
417 FlFileError (FileId, ASL_MSG_SEEK);
418 AslAbort ();
423 /*******************************************************************************
425 * FUNCTION: FlCloseFile
427 * PARAMETERS: FileId - Index into file info array
429 * RETURN: None
431 * DESCRIPTION: Close an open file. Aborts compiler on error
433 ******************************************************************************/
435 void
436 FlCloseFile (
437 UINT32 FileId)
439 int Error;
442 if (!Gbl_Files[FileId].Handle)
444 return;
447 Error = fclose (Gbl_Files[FileId].Handle);
448 Gbl_Files[FileId].Handle = NULL;
450 if (Error)
452 FlFileError (FileId, ASL_MSG_CLOSE);
453 AslAbort ();
456 return;
460 /*******************************************************************************
462 * FUNCTION: FlSetLineNumber
464 * PARAMETERS: Op - Parse node for the LINE asl statement
466 * RETURN: None.
468 * DESCRIPTION: Set the current line number
470 ******************************************************************************/
472 void
473 FlSetLineNumber (
474 ACPI_PARSE_OBJECT *Op)
477 Gbl_CurrentLineNumber = (UINT32) Op->Asl.Value.Integer;
478 Gbl_LogicalLineNumber = (UINT32) Op->Asl.Value.Integer;
482 /*******************************************************************************
484 * FUNCTION: FlOpenIncludeFile
486 * PARAMETERS: Op - Parse node for the INCLUDE ASL statement
488 * RETURN: None.
490 * DESCRIPTION: Open an include file and push it on the input file stack.
492 ******************************************************************************/
494 void
495 FlOpenIncludeFile (
496 ACPI_PARSE_OBJECT *Op)
498 FILE *IncFile;
501 /* Op must be valid */
503 if (!Op)
505 AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN,
506 Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
507 Gbl_InputByteCount, Gbl_CurrentColumn,
508 Gbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node");
510 return;
514 * Flush out the "include ()" statement on this line, start
515 * the actual include file on the next line
517 ResetCurrentLineBuffer ();
518 FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n");
519 Gbl_CurrentLineOffset++;
521 /* Prepend the directory pathname and open the include file */
523 DbgPrint (ASL_PARSE_OUTPUT, "\nOpen include file: path %s\n\n",
524 Op->Asl.Value.String);
525 IncFile = FlOpenLocalFile (Op->Asl.Value.String, "r");
526 if (!IncFile)
528 sprintf (MsgBuffer, "%s (%s)", Op->Asl.Value.String, strerror (errno));
529 AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer);
530 return;
533 /* Push the include file on the open input file stack */
535 AslPushInputFileStack (IncFile, Op->Asl.Value.String);
539 /*******************************************************************************
541 * FUNCTION: FlOpenInputFile
543 * PARAMETERS: InputFilename - The user-specified ASL source file to be
544 * compiled
546 * RETURN: Status
548 * DESCRIPTION: Open the specified input file, and save the directory path to
549 * the file so that include files can be opened in
550 * the same directory.
552 ******************************************************************************/
554 ACPI_STATUS
555 FlOpenInputFile (
556 char *InputFilename)
559 /* Open the input ASL file, text mode */
561 FlOpenFile (ASL_FILE_INPUT, InputFilename, "r");
562 AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle;
564 return (AE_OK);
568 /*******************************************************************************
570 * FUNCTION: FlOpenAmlOutputFile
572 * PARAMETERS: FilenamePrefix - The user-specified ASL source file
574 * RETURN: Status
576 * DESCRIPTION: Create the output filename (*.AML) and open the file. The file
577 * is created in the same directory as the parent input file.
579 ******************************************************************************/
581 ACPI_STATUS
582 FlOpenAmlOutputFile (
583 char *FilenamePrefix)
585 char *Filename;
588 /* Output filename usually comes from the ASL itself */
590 Filename = Gbl_Files[ASL_FILE_AML_OUTPUT].Filename;
591 if (!Filename)
593 /* Create the output AML filename */
595 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE);
596 if (!Filename)
598 AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME,
599 0, 0, 0, 0, NULL, NULL);
600 return (AE_ERROR);
604 /* Open the output AML file in binary mode */
606 FlOpenFile (ASL_FILE_AML_OUTPUT, Filename, "w+b");
607 return (AE_OK);
611 /*******************************************************************************
613 * FUNCTION: FlOpenMiscOutputFiles
615 * PARAMETERS: FilenamePrefix - The user-specified ASL source file
617 * RETURN: Status
619 * DESCRIPTION: Create and open the various output files needed, depending on
620 * the command line options
622 ******************************************************************************/
624 ACPI_STATUS
625 FlOpenMiscOutputFiles (
626 char *FilenamePrefix)
628 char *Filename;
631 /* Create/Open a combined source output file */
633 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE);
634 if (!Filename)
636 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
637 0, 0, 0, 0, NULL, NULL);
638 return (AE_ERROR);
642 * Open the source output file, binary mode (so that LF does not get
643 * expanded to CR/LF on some systems, messing up our seek
644 * calculations.)
646 FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b");
648 /* Create/Open a listing output file if asked */
650 if (Gbl_ListingFlag)
652 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING);
653 if (!Filename)
655 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
656 0, 0, 0, 0, NULL, NULL);
657 return (AE_ERROR);
660 /* Open the listing file, text mode */
662 FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+");
664 AslCompilerSignon (ASL_FILE_LISTING_OUTPUT);
665 AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT);
668 /* Create/Open a assembly code source output file if asked */
670 if (Gbl_AsmOutputFlag)
672 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE);
673 if (!Filename)
675 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
676 0, 0, 0, 0, NULL, NULL);
677 return (AE_ERROR);
680 /* Open the assembly code source file, text mode */
682 FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+");
684 AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT);
685 AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT);
688 /* Create/Open a C code source output file if asked */
690 if (Gbl_C_OutputFlag)
692 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE);
693 if (!Filename)
695 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
696 0, 0, 0, 0, NULL, NULL);
697 return (AE_ERROR);
700 /* Open the C code source file, text mode */
702 FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+");
704 FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n");
705 AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT);
706 AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT);
709 /* Create/Open a assembly include output file if asked */
711 if (Gbl_AsmIncludeOutputFlag)
713 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE);
714 if (!Filename)
716 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
717 0, 0, 0, 0, NULL, NULL);
718 return (AE_ERROR);
721 /* Open the assembly include file, text mode */
723 FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+");
725 AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT);
726 AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT);
729 /* Create/Open a C include output file if asked */
731 if (Gbl_C_IncludeOutputFlag)
733 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE);
734 if (!Filename)
736 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
737 0, 0, 0, 0, NULL, NULL);
738 return (AE_ERROR);
741 /* Open the C include file, text mode */
743 FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+");
745 FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n");
746 AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT);
747 AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT);
750 /* Create/Open a hex output file if asked */
752 if (Gbl_HexOutputFlag)
754 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP);
755 if (!Filename)
757 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
758 0, 0, 0, 0, NULL, NULL);
759 return (AE_ERROR);
762 /* Open the hex file, text mode */
764 FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+");
766 AslCompilerSignon (ASL_FILE_HEX_OUTPUT);
767 AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT);
770 /* Create a namespace output file if asked */
772 if (Gbl_NsOutputFlag)
774 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE);
775 if (!Filename)
777 AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
778 0, 0, 0, 0, NULL, NULL);
779 return (AE_ERROR);
782 /* Open the namespace file, text mode */
784 FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+");
786 AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT);
787 AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT);
790 /* Create/Open a debug output file if asked */
792 if (Gbl_DebugFlag)
794 Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG);
795 if (!Filename)
797 AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME,
798 0, 0, 0, 0, NULL, NULL);
799 return (AE_ERROR);
802 /* Open the debug file as STDERR, text mode */
804 /* TBD: hide this behind a FlReopenFile function */
806 Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename;
807 Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle =
808 freopen (Filename, "w+t", stderr);
810 AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT);
811 AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT);
814 return (AE_OK);
818 #ifdef ACPI_OBSOLETE_FUNCTIONS
819 /*******************************************************************************
821 * FUNCTION: FlParseInputPathname
823 * PARAMETERS: InputFilename - The user-specified ASL source file to be
824 * compiled
826 * RETURN: Status
828 * DESCRIPTION: Split the input path into a directory and filename part
829 * 1) Directory part used to open include files
830 * 2) Filename part used to generate output filenames
832 ******************************************************************************/
834 ACPI_STATUS
835 FlParseInputPathname (
836 char *InputFilename)
838 char *Substring;
841 if (!InputFilename)
843 return (AE_OK);
846 /* Get the path to the input filename's directory */
848 Gbl_DirectoryPath = strdup (InputFilename);
849 if (!Gbl_DirectoryPath)
851 return (AE_NO_MEMORY);
854 Substring = strrchr (Gbl_DirectoryPath, '\\');
855 if (!Substring)
857 Substring = strrchr (Gbl_DirectoryPath, '/');
858 if (!Substring)
860 Substring = strrchr (Gbl_DirectoryPath, ':');
864 if (!Substring)
866 Gbl_DirectoryPath[0] = 0;
867 if (Gbl_UseDefaultAmlFilename)
869 Gbl_OutputFilenamePrefix = strdup (InputFilename);
872 else
874 if (Gbl_UseDefaultAmlFilename)
876 Gbl_OutputFilenamePrefix = strdup (Substring + 1);
878 *(Substring+1) = 0;
881 return (AE_OK);
883 #endif