1eef1b955SJung-uk Kim /****************************************************************************** 2eef1b955SJung-uk Kim * 3eef1b955SJung-uk Kim * Module Name: aslsupport.l - Flex/lex scanner C support routines. 4eef1b955SJung-uk Kim * NOTE: Included into aslcompile.l, not compiled by itself. 5eef1b955SJung-uk Kim * 6eef1b955SJung-uk Kim *****************************************************************************/ 7eef1b955SJung-uk Kim 8eef1b955SJung-uk Kim /* 91c0e1b6dSJung-uk Kim * Copyright (C) 2000 - 2015, Intel Corp. 10eef1b955SJung-uk Kim * All rights reserved. 11eef1b955SJung-uk Kim * 12eef1b955SJung-uk Kim * Redistribution and use in source and binary forms, with or without 13eef1b955SJung-uk Kim * modification, are permitted provided that the following conditions 14eef1b955SJung-uk Kim * are met: 15eef1b955SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 16eef1b955SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 17eef1b955SJung-uk Kim * without modification. 18eef1b955SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19eef1b955SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 20eef1b955SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 21eef1b955SJung-uk Kim * including a substantially similar Disclaimer requirement for further 22eef1b955SJung-uk Kim * binary redistribution. 23eef1b955SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 24eef1b955SJung-uk Kim * of any contributors may be used to endorse or promote products derived 25eef1b955SJung-uk Kim * from this software without specific prior written permission. 26eef1b955SJung-uk Kim * 27eef1b955SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 28eef1b955SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 29eef1b955SJung-uk Kim * Software Foundation. 30eef1b955SJung-uk Kim * 31eef1b955SJung-uk Kim * NO WARRANTY 32eef1b955SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33eef1b955SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34eef1b955SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35eef1b955SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36eef1b955SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37eef1b955SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38eef1b955SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39eef1b955SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40eef1b955SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41eef1b955SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42eef1b955SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 43eef1b955SJung-uk Kim */ 44eef1b955SJung-uk Kim 45eef1b955SJung-uk Kim /* Configuration */ 46eef1b955SJung-uk Kim 47eef1b955SJung-uk Kim #define ASL_SPACES_PER_TAB 4 48eef1b955SJung-uk Kim 49eef1b955SJung-uk Kim #define ASL_NORMAL_CHAR 0 50eef1b955SJung-uk Kim #define ASL_ESCAPE_SEQUENCE 1 51eef1b955SJung-uk Kim #define ASL_OCTAL_CONSTANT 2 52eef1b955SJung-uk Kim #define ASL_HEX_CONSTANT 3 53eef1b955SJung-uk Kim 54eef1b955SJung-uk Kim 55eef1b955SJung-uk Kim /* File node - used for "Include" operator file stack */ 56eef1b955SJung-uk Kim 57eef1b955SJung-uk Kim typedef struct asl_file_node 58eef1b955SJung-uk Kim { 59eef1b955SJung-uk Kim FILE *File; 60eef1b955SJung-uk Kim UINT32 CurrentLineNumber; 61eef1b955SJung-uk Kim YY_BUFFER_STATE State; 62eef1b955SJung-uk Kim char *Filename; 63eef1b955SJung-uk Kim struct asl_file_node *Next; 64eef1b955SJung-uk Kim 65eef1b955SJung-uk Kim } ASL_FILE_NODE; 66eef1b955SJung-uk Kim 67eef1b955SJung-uk Kim /* File stack for the "Include" operator (NOT #include operator) */ 68eef1b955SJung-uk Kim 69eef1b955SJung-uk Kim ASL_FILE_NODE *Gbl_IncludeFileStack = NULL; 70eef1b955SJung-uk Kim 71eef1b955SJung-uk Kim 721c0e1b6dSJung-uk Kim /******************************************************************************* 731c0e1b6dSJung-uk Kim * 741c0e1b6dSJung-uk Kim * FUNCTION: AslParserCleanup 751c0e1b6dSJung-uk Kim * 761c0e1b6dSJung-uk Kim * Used to delete the current buffer 771c0e1b6dSJung-uk Kim * 781c0e1b6dSJung-uk Kim ******************************************************************************/ 791c0e1b6dSJung-uk Kim 80313a0c13SJung-uk Kim void 81313a0c13SJung-uk Kim AslParserCleanup ( 82313a0c13SJung-uk Kim void) 83313a0c13SJung-uk Kim { 84313a0c13SJung-uk Kim 85313a0c13SJung-uk Kim yy_delete_buffer (YY_CURRENT_BUFFER); 86313a0c13SJung-uk Kim } 87313a0c13SJung-uk Kim 88313a0c13SJung-uk Kim 89eef1b955SJung-uk Kim /******************************************************************************* 90eef1b955SJung-uk Kim * 91eef1b955SJung-uk Kim * FUNCTION: AslDoLineDirective 92eef1b955SJung-uk Kim * 93eef1b955SJung-uk Kim * PARAMETERS: None. Uses input() to access current source code line 94eef1b955SJung-uk Kim * 95eef1b955SJung-uk Kim * RETURN: Updates global line number and filename 96eef1b955SJung-uk Kim * 97eef1b955SJung-uk Kim * DESCRIPTION: Handle #line directives emitted by the preprocessor. 98eef1b955SJung-uk Kim * 99eef1b955SJung-uk Kim * The #line directive is emitted by the preprocesser, and is used to 100eef1b955SJung-uk Kim * pass through line numbers from the original source code file to the 101eef1b955SJung-uk Kim * preprocessor output file (.i). This allows any compiler-generated 102eef1b955SJung-uk Kim * error messages to be displayed with the correct line number. 103eef1b955SJung-uk Kim * 104eef1b955SJung-uk Kim ******************************************************************************/ 105eef1b955SJung-uk Kim 106eef1b955SJung-uk Kim static void 107eef1b955SJung-uk Kim AslDoLineDirective ( 108eef1b955SJung-uk Kim void) 109eef1b955SJung-uk Kim { 110f38b0f21SJung-uk Kim int c; 111eef1b955SJung-uk Kim char *Token; 112eef1b955SJung-uk Kim UINT32 LineNumber; 113eef1b955SJung-uk Kim char *Filename; 114f38b0f21SJung-uk Kim UINT32 i; 115eef1b955SJung-uk Kim 116*5ef50723SJung-uk Kim Gbl_HasIncludeFiles = TRUE; 117eef1b955SJung-uk Kim 118eef1b955SJung-uk Kim /* Eat the entire line that contains the #line directive */ 119eef1b955SJung-uk Kim 120f38b0f21SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 121f38b0f21SJung-uk Kim 122f38b0f21SJung-uk Kim while ((c = input()) != '\n' && c != EOF) 123eef1b955SJung-uk Kim { 124f38b0f21SJung-uk Kim *Gbl_LineBufPtr = c; 125f38b0f21SJung-uk Kim Gbl_LineBufPtr++; 126eef1b955SJung-uk Kim } 127f38b0f21SJung-uk Kim *Gbl_LineBufPtr = 0; 128eef1b955SJung-uk Kim 129eef1b955SJung-uk Kim /* First argument is the actual line number */ 130eef1b955SJung-uk Kim 131eef1b955SJung-uk Kim Token = strtok (Gbl_CurrentLineBuffer, " "); 132eef1b955SJung-uk Kim if (!Token) 133eef1b955SJung-uk Kim { 134eef1b955SJung-uk Kim goto ResetAndExit; 135eef1b955SJung-uk Kim } 136eef1b955SJung-uk Kim 137f38b0f21SJung-uk Kim /* First argument is the line number */ 138eef1b955SJung-uk Kim 139eef1b955SJung-uk Kim LineNumber = (UINT32) UtDoConstant (Token); 140f38b0f21SJung-uk Kim 141f38b0f21SJung-uk Kim /* Emit the appropriate number of newlines */ 142f38b0f21SJung-uk Kim 143f38b0f21SJung-uk Kim Gbl_CurrentColumn = 0; 144f38b0f21SJung-uk Kim if (LineNumber > Gbl_CurrentLineNumber) 145f38b0f21SJung-uk Kim { 146f38b0f21SJung-uk Kim for (i = 0; i < (LineNumber - Gbl_CurrentLineNumber); i++) 147f38b0f21SJung-uk Kim { 148f38b0f21SJung-uk Kim FlWriteFile (ASL_FILE_SOURCE_OUTPUT, "\n", 1); 149f38b0f21SJung-uk Kim Gbl_CurrentColumn++; 150f38b0f21SJung-uk Kim } 151f38b0f21SJung-uk Kim } 152f38b0f21SJung-uk Kim 153f38b0f21SJung-uk Kim FlSetLineNumber (LineNumber); 154eef1b955SJung-uk Kim 155eef1b955SJung-uk Kim /* Second argument is the optional filename (in double quotes) */ 156eef1b955SJung-uk Kim 157eef1b955SJung-uk Kim Token = strtok (NULL, " \""); 158eef1b955SJung-uk Kim if (Token) 159eef1b955SJung-uk Kim { 160eef1b955SJung-uk Kim Filename = ACPI_ALLOCATE_ZEROED (strlen (Token) + 1); 161eef1b955SJung-uk Kim strcpy (Filename, Token); 162eef1b955SJung-uk Kim FlSetFilename (Filename); 163eef1b955SJung-uk Kim } 164eef1b955SJung-uk Kim 165eef1b955SJung-uk Kim /* Third argument is not supported at this time */ 166eef1b955SJung-uk Kim 167eef1b955SJung-uk Kim ResetAndExit: 168f38b0f21SJung-uk Kim 169f38b0f21SJung-uk Kim /* Reset globals for a new line */ 170f38b0f21SJung-uk Kim 171f38b0f21SJung-uk Kim Gbl_CurrentLineOffset += Gbl_CurrentColumn; 172f38b0f21SJung-uk Kim Gbl_CurrentColumn = 0; 173f38b0f21SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 174eef1b955SJung-uk Kim } 175eef1b955SJung-uk Kim 176eef1b955SJung-uk Kim 177eef1b955SJung-uk Kim /******************************************************************************* 178eef1b955SJung-uk Kim * 179eef1b955SJung-uk Kim * FUNCTION: AslPopInputFileStack 180eef1b955SJung-uk Kim * 181eef1b955SJung-uk Kim * PARAMETERS: None 182eef1b955SJung-uk Kim * 183eef1b955SJung-uk Kim * RETURN: 0 if a node was popped, -1 otherwise 184eef1b955SJung-uk Kim * 185eef1b955SJung-uk Kim * DESCRIPTION: Pop the top of the input file stack and point the parser to 186eef1b955SJung-uk Kim * the saved parse buffer contained in the fnode. Also, set the 187eef1b955SJung-uk Kim * global line counters to the saved values. This function is 188eef1b955SJung-uk Kim * called when an include file reaches EOF. 189eef1b955SJung-uk Kim * 190eef1b955SJung-uk Kim ******************************************************************************/ 191eef1b955SJung-uk Kim 192eef1b955SJung-uk Kim int 193eef1b955SJung-uk Kim AslPopInputFileStack ( 194eef1b955SJung-uk Kim void) 195eef1b955SJung-uk Kim { 196eef1b955SJung-uk Kim ASL_FILE_NODE *Fnode; 197eef1b955SJung-uk Kim 198eef1b955SJung-uk Kim 199eef1b955SJung-uk Kim Fnode = Gbl_IncludeFileStack; 2001c0e1b6dSJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, 2011c0e1b6dSJung-uk Kim "\nPop InputFile Stack, Fnode %p\n\n", Fnode); 202eef1b955SJung-uk Kim 203eef1b955SJung-uk Kim if (!Fnode) 204eef1b955SJung-uk Kim { 205eef1b955SJung-uk Kim return (-1); 206eef1b955SJung-uk Kim } 207eef1b955SJung-uk Kim 208eef1b955SJung-uk Kim /* Close the current include file */ 209eef1b955SJung-uk Kim 210eef1b955SJung-uk Kim fclose (yyin); 211eef1b955SJung-uk Kim 212eef1b955SJung-uk Kim /* Update the top-of-stack */ 213eef1b955SJung-uk Kim 214eef1b955SJung-uk Kim Gbl_IncludeFileStack = Fnode->Next; 215eef1b955SJung-uk Kim 216eef1b955SJung-uk Kim /* Reset global line counter and filename */ 217eef1b955SJung-uk Kim 218eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename; 219eef1b955SJung-uk Kim Gbl_CurrentLineNumber = Fnode->CurrentLineNumber; 220eef1b955SJung-uk Kim 221eef1b955SJung-uk Kim /* Point the parser to the popped file */ 222eef1b955SJung-uk Kim 223eef1b955SJung-uk Kim yy_delete_buffer (YY_CURRENT_BUFFER); 224eef1b955SJung-uk Kim yy_switch_to_buffer (Fnode->State); 225eef1b955SJung-uk Kim 226eef1b955SJung-uk Kim /* All done with this node */ 227eef1b955SJung-uk Kim 228eef1b955SJung-uk Kim ACPI_FREE (Fnode); 229eef1b955SJung-uk Kim return (0); 230eef1b955SJung-uk Kim } 231eef1b955SJung-uk Kim 232eef1b955SJung-uk Kim 233eef1b955SJung-uk Kim /******************************************************************************* 234eef1b955SJung-uk Kim * 235eef1b955SJung-uk Kim * FUNCTION: AslPushInputFileStack 236eef1b955SJung-uk Kim * 237eef1b955SJung-uk Kim * PARAMETERS: InputFile - Open file pointer 238eef1b955SJung-uk Kim * Filename - Name of the file 239eef1b955SJung-uk Kim * 240eef1b955SJung-uk Kim * RETURN: None 241eef1b955SJung-uk Kim * 242eef1b955SJung-uk Kim * DESCRIPTION: Push the InputFile onto the file stack, and point the parser 243eef1b955SJung-uk Kim * to this file. Called when an include file is successfully 244eef1b955SJung-uk Kim * opened. 245eef1b955SJung-uk Kim * 246eef1b955SJung-uk Kim ******************************************************************************/ 247eef1b955SJung-uk Kim 248eef1b955SJung-uk Kim void 249eef1b955SJung-uk Kim AslPushInputFileStack ( 250eef1b955SJung-uk Kim FILE *InputFile, 251eef1b955SJung-uk Kim char *Filename) 252eef1b955SJung-uk Kim { 253eef1b955SJung-uk Kim ASL_FILE_NODE *Fnode; 254eef1b955SJung-uk Kim YY_BUFFER_STATE State; 255eef1b955SJung-uk Kim 256eef1b955SJung-uk Kim 257eef1b955SJung-uk Kim /* Save the current state in an Fnode */ 258eef1b955SJung-uk Kim 259eef1b955SJung-uk Kim Fnode = UtLocalCalloc (sizeof (ASL_FILE_NODE)); 260eef1b955SJung-uk Kim 261eef1b955SJung-uk Kim Fnode->File = yyin; 262eef1b955SJung-uk Kim Fnode->Next = Gbl_IncludeFileStack; 263eef1b955SJung-uk Kim Fnode->State = YY_CURRENT_BUFFER; 264eef1b955SJung-uk Kim Fnode->Filename = Gbl_Files[ASL_FILE_INPUT].Filename; 2651c0e1b6dSJung-uk Kim Fnode->CurrentLineNumber = Gbl_CurrentLineNumber; 266eef1b955SJung-uk Kim 267eef1b955SJung-uk Kim /* Push it on the stack */ 268eef1b955SJung-uk Kim 269eef1b955SJung-uk Kim Gbl_IncludeFileStack = Fnode; 270eef1b955SJung-uk Kim 271eef1b955SJung-uk Kim /* Point the parser to this file */ 272eef1b955SJung-uk Kim 273eef1b955SJung-uk Kim State = yy_create_buffer (InputFile, YY_BUF_SIZE); 274eef1b955SJung-uk Kim yy_switch_to_buffer (State); 275eef1b955SJung-uk Kim 2761c0e1b6dSJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, 2771c0e1b6dSJung-uk Kim "\nPush InputFile Stack, returning %p\n\n", InputFile); 278eef1b955SJung-uk Kim 279eef1b955SJung-uk Kim /* Reset the global line count and filename */ 280eef1b955SJung-uk Kim 281313a0c13SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = 282313a0c13SJung-uk Kim UtStringCacheCalloc (strlen (Filename) + 1); 283313a0c13SJung-uk Kim 284313a0c13SJung-uk Kim strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename); 285313a0c13SJung-uk Kim 286eef1b955SJung-uk Kim Gbl_CurrentLineNumber = 1; 287eef1b955SJung-uk Kim yyin = InputFile; 288eef1b955SJung-uk Kim } 289eef1b955SJung-uk Kim 290eef1b955SJung-uk Kim 291eef1b955SJung-uk Kim /******************************************************************************* 292eef1b955SJung-uk Kim * 293eef1b955SJung-uk Kim * FUNCTION: AslResetCurrentLineBuffer 294eef1b955SJung-uk Kim * 295eef1b955SJung-uk Kim * PARAMETERS: None 296eef1b955SJung-uk Kim * 297eef1b955SJung-uk Kim * RETURN: None 298eef1b955SJung-uk Kim * 299eef1b955SJung-uk Kim * DESCRIPTION: Reset the Line Buffer to zero, increment global line numbers. 300eef1b955SJung-uk Kim * 301eef1b955SJung-uk Kim ******************************************************************************/ 302eef1b955SJung-uk Kim 303eef1b955SJung-uk Kim void 304eef1b955SJung-uk Kim AslResetCurrentLineBuffer ( 305eef1b955SJung-uk Kim void) 306eef1b955SJung-uk Kim { 307eef1b955SJung-uk Kim 308eef1b955SJung-uk Kim if (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle) 309eef1b955SJung-uk Kim { 310eef1b955SJung-uk Kim FlWriteFile (ASL_FILE_SOURCE_OUTPUT, Gbl_CurrentLineBuffer, 311eef1b955SJung-uk Kim Gbl_LineBufPtr - Gbl_CurrentLineBuffer); 312eef1b955SJung-uk Kim } 313eef1b955SJung-uk Kim 314eef1b955SJung-uk Kim Gbl_CurrentLineOffset += Gbl_CurrentColumn; 315eef1b955SJung-uk Kim Gbl_CurrentColumn = 0; 316eef1b955SJung-uk Kim 317eef1b955SJung-uk Kim Gbl_CurrentLineNumber++; 318eef1b955SJung-uk Kim Gbl_LogicalLineNumber++; 319eef1b955SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 320eef1b955SJung-uk Kim } 321eef1b955SJung-uk Kim 322eef1b955SJung-uk Kim 323eef1b955SJung-uk Kim /******************************************************************************* 324eef1b955SJung-uk Kim * 325eef1b955SJung-uk Kim * FUNCTION: AslInsertLineBuffer 326eef1b955SJung-uk Kim * 327eef1b955SJung-uk Kim * PARAMETERS: SourceChar - One char from the input ASL source file 328eef1b955SJung-uk Kim * 329eef1b955SJung-uk Kim * RETURN: None 330eef1b955SJung-uk Kim * 331eef1b955SJung-uk Kim * DESCRIPTION: Put one character of the source file into the temp line buffer 332eef1b955SJung-uk Kim * 333eef1b955SJung-uk Kim ******************************************************************************/ 334eef1b955SJung-uk Kim 335eef1b955SJung-uk Kim void 336eef1b955SJung-uk Kim AslInsertLineBuffer ( 337eef1b955SJung-uk Kim int SourceChar) 338eef1b955SJung-uk Kim { 339eef1b955SJung-uk Kim UINT32 i; 340eef1b955SJung-uk Kim UINT32 Count = 1; 341eef1b955SJung-uk Kim 342eef1b955SJung-uk Kim 343eef1b955SJung-uk Kim if (SourceChar == EOF) 344eef1b955SJung-uk Kim { 345eef1b955SJung-uk Kim return; 346eef1b955SJung-uk Kim } 347eef1b955SJung-uk Kim 348eef1b955SJung-uk Kim Gbl_InputByteCount++; 349eef1b955SJung-uk Kim 350eef1b955SJung-uk Kim /* Handle tabs. Convert to spaces */ 351eef1b955SJung-uk Kim 352eef1b955SJung-uk Kim if (SourceChar == '\t') 353eef1b955SJung-uk Kim { 354eef1b955SJung-uk Kim SourceChar = ' '; 355eef1b955SJung-uk Kim Count = ASL_SPACES_PER_TAB - 356eef1b955SJung-uk Kim (Gbl_CurrentColumn & (ASL_SPACES_PER_TAB-1)); 357eef1b955SJung-uk Kim } 358eef1b955SJung-uk Kim 359eef1b955SJung-uk Kim for (i = 0; i < Count; i++) 360eef1b955SJung-uk Kim { 361eef1b955SJung-uk Kim Gbl_CurrentColumn++; 362eef1b955SJung-uk Kim 363eef1b955SJung-uk Kim /* Insert the character into the line buffer */ 364eef1b955SJung-uk Kim 365eef1b955SJung-uk Kim *Gbl_LineBufPtr = (UINT8) SourceChar; 366eef1b955SJung-uk Kim Gbl_LineBufPtr++; 367eef1b955SJung-uk Kim 3681c0e1b6dSJung-uk Kim if (Gbl_LineBufPtr > 3691c0e1b6dSJung-uk Kim (Gbl_CurrentLineBuffer + (Gbl_LineBufferSize - 1))) 370eef1b955SJung-uk Kim { 371eef1b955SJung-uk Kim #if 0 372eef1b955SJung-uk Kim /* 373eef1b955SJung-uk Kim * Warning if we have split a long source line. 374eef1b955SJung-uk Kim * <Probably overkill> 375eef1b955SJung-uk Kim */ 376042ff955SJung-uk Kim sprintf (MsgBuffer, "Max %u", Gbl_LineBufferSize); 377eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_LONG_LINE, 378eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 379eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 380eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, MsgBuffer); 381eef1b955SJung-uk Kim #endif 382eef1b955SJung-uk Kim 383eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 384eef1b955SJung-uk Kim } 385eef1b955SJung-uk Kim else if (SourceChar == '\n') 386eef1b955SJung-uk Kim { 387eef1b955SJung-uk Kim /* End of line */ 388eef1b955SJung-uk Kim 389eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 390eef1b955SJung-uk Kim } 391eef1b955SJung-uk Kim } 392eef1b955SJung-uk Kim } 393eef1b955SJung-uk Kim 394eef1b955SJung-uk Kim 395eef1b955SJung-uk Kim /******************************************************************************* 396eef1b955SJung-uk Kim * 397eef1b955SJung-uk Kim * FUNCTION: count 398eef1b955SJung-uk Kim * 399eef1b955SJung-uk Kim * PARAMETERS: yytext - Contains the matched keyword. 400eef1b955SJung-uk Kim * Type - Keyword/Character type: 401eef1b955SJung-uk Kim * 0 = anything except a keyword 402eef1b955SJung-uk Kim * 1 = pseudo-keywords 403eef1b955SJung-uk Kim * 2 = non-executable ASL keywords 404eef1b955SJung-uk Kim * 3 = executable ASL keywords 405eef1b955SJung-uk Kim * 406eef1b955SJung-uk Kim * RETURN: None 407eef1b955SJung-uk Kim * 408eef1b955SJung-uk Kim * DESCRIPTION: Count keywords and put them into the line buffer 409eef1b955SJung-uk Kim * 410eef1b955SJung-uk Kim ******************************************************************************/ 411eef1b955SJung-uk Kim 412eef1b955SJung-uk Kim static void 413eef1b955SJung-uk Kim count ( 414eef1b955SJung-uk Kim int Type) 415eef1b955SJung-uk Kim { 416eef1b955SJung-uk Kim int i; 417eef1b955SJung-uk Kim 418eef1b955SJung-uk Kim 419eef1b955SJung-uk Kim switch (Type) 420eef1b955SJung-uk Kim { 421eef1b955SJung-uk Kim case 2: 422a9d8d09cSJung-uk Kim 423eef1b955SJung-uk Kim TotalKeywords++; 424eef1b955SJung-uk Kim TotalNamedObjects++; 425eef1b955SJung-uk Kim break; 426eef1b955SJung-uk Kim 427eef1b955SJung-uk Kim case 3: 428a9d8d09cSJung-uk Kim 429eef1b955SJung-uk Kim TotalKeywords++; 430eef1b955SJung-uk Kim TotalExecutableOpcodes++; 431eef1b955SJung-uk Kim break; 4329c48c75eSJung-uk Kim 4339c48c75eSJung-uk Kim default: 434a9d8d09cSJung-uk Kim 4359c48c75eSJung-uk Kim break; 436eef1b955SJung-uk Kim } 437eef1b955SJung-uk Kim 438eef1b955SJung-uk Kim for (i = 0; (yytext[i] != 0) && (yytext[i] != EOF); i++) 439eef1b955SJung-uk Kim { 440eef1b955SJung-uk Kim AslInsertLineBuffer (yytext[i]); 441eef1b955SJung-uk Kim *Gbl_LineBufPtr = 0; 442eef1b955SJung-uk Kim } 443eef1b955SJung-uk Kim } 444eef1b955SJung-uk Kim 445eef1b955SJung-uk Kim 446eef1b955SJung-uk Kim /******************************************************************************* 447eef1b955SJung-uk Kim * 448eef1b955SJung-uk Kim * FUNCTION: AslDoComment 449eef1b955SJung-uk Kim * 450eef1b955SJung-uk Kim * PARAMETERS: none 451eef1b955SJung-uk Kim * 452eef1b955SJung-uk Kim * RETURN: none 453eef1b955SJung-uk Kim * 454eef1b955SJung-uk Kim * DESCRIPTION: Process a standard comment. 455eef1b955SJung-uk Kim * 456eef1b955SJung-uk Kim ******************************************************************************/ 457eef1b955SJung-uk Kim 458eef1b955SJung-uk Kim static char 459eef1b955SJung-uk Kim AslDoComment ( 460eef1b955SJung-uk Kim void) 461eef1b955SJung-uk Kim { 462f38b0f21SJung-uk Kim int c; 463f38b0f21SJung-uk Kim int c1 = 0; 464eef1b955SJung-uk Kim 465eef1b955SJung-uk Kim 466eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 467eef1b955SJung-uk Kim AslInsertLineBuffer ('*'); 468eef1b955SJung-uk Kim 469eef1b955SJung-uk Kim loop: 470eef1b955SJung-uk Kim 471eef1b955SJung-uk Kim /* Eat chars until end-of-comment */ 472eef1b955SJung-uk Kim 4731c0e1b6dSJung-uk Kim while (((c = input ()) != '*') && (c != EOF)) 474eef1b955SJung-uk Kim { 475eef1b955SJung-uk Kim AslInsertLineBuffer (c); 476eef1b955SJung-uk Kim c1 = c; 477eef1b955SJung-uk Kim } 478eef1b955SJung-uk Kim 479eef1b955SJung-uk Kim if (c == EOF) 480eef1b955SJung-uk Kim { 481eef1b955SJung-uk Kim goto EarlyEOF; 482eef1b955SJung-uk Kim } 483eef1b955SJung-uk Kim 484eef1b955SJung-uk Kim /* 485eef1b955SJung-uk Kim * Check for nested comment -- can help catch cases where a previous 486eef1b955SJung-uk Kim * comment was accidently left unterminated 487eef1b955SJung-uk Kim */ 488eef1b955SJung-uk Kim if ((c1 == '/') && (c == '*')) 489eef1b955SJung-uk Kim { 490eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_NESTED_COMMENT, 491eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 492eef1b955SJung-uk Kim Gbl_InputByteCount, Gbl_CurrentColumn, 493eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 494eef1b955SJung-uk Kim } 495eef1b955SJung-uk Kim 496eef1b955SJung-uk Kim /* Comment is closed only if the NEXT character is a slash */ 497eef1b955SJung-uk Kim 498eef1b955SJung-uk Kim AslInsertLineBuffer (c); 499eef1b955SJung-uk Kim 5001c0e1b6dSJung-uk Kim if (((c1 = input ()) != '/') && (c1 != EOF)) 501eef1b955SJung-uk Kim { 502eef1b955SJung-uk Kim unput(c1); 503eef1b955SJung-uk Kim goto loop; 504eef1b955SJung-uk Kim } 505eef1b955SJung-uk Kim 506eef1b955SJung-uk Kim if (c1 == EOF) 507eef1b955SJung-uk Kim { 508eef1b955SJung-uk Kim goto EarlyEOF; 509eef1b955SJung-uk Kim } 510eef1b955SJung-uk Kim 511eef1b955SJung-uk Kim AslInsertLineBuffer (c1); 512eef1b955SJung-uk Kim return (TRUE); 513eef1b955SJung-uk Kim 514eef1b955SJung-uk Kim 515eef1b955SJung-uk Kim EarlyEOF: 516eef1b955SJung-uk Kim /* 517eef1b955SJung-uk Kim * Premature End-Of-File 518eef1b955SJung-uk Kim */ 519eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, 520eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 521eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 522eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 523eef1b955SJung-uk Kim return (FALSE); 524eef1b955SJung-uk Kim } 525eef1b955SJung-uk Kim 526eef1b955SJung-uk Kim 527eef1b955SJung-uk Kim /******************************************************************************* 528eef1b955SJung-uk Kim * 529eef1b955SJung-uk Kim * FUNCTION: AslDoCommentType2 530eef1b955SJung-uk Kim * 531eef1b955SJung-uk Kim * PARAMETERS: none 532eef1b955SJung-uk Kim * 533eef1b955SJung-uk Kim * RETURN: none 534eef1b955SJung-uk Kim * 535eef1b955SJung-uk Kim * DESCRIPTION: Process a new "//" comment. 536eef1b955SJung-uk Kim * 537eef1b955SJung-uk Kim ******************************************************************************/ 538eef1b955SJung-uk Kim 539eef1b955SJung-uk Kim static char 540eef1b955SJung-uk Kim AslDoCommentType2 ( 541eef1b955SJung-uk Kim void) 542eef1b955SJung-uk Kim { 543f38b0f21SJung-uk Kim int c; 544eef1b955SJung-uk Kim 545eef1b955SJung-uk Kim 546eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 547eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 548eef1b955SJung-uk Kim 5491c0e1b6dSJung-uk Kim while (((c = input ()) != '\n') && (c != EOF)) 550eef1b955SJung-uk Kim { 551eef1b955SJung-uk Kim AslInsertLineBuffer (c); 552eef1b955SJung-uk Kim } 553eef1b955SJung-uk Kim 554eef1b955SJung-uk Kim if (c == EOF) 555eef1b955SJung-uk Kim { 556eef1b955SJung-uk Kim /* End of file is OK, change to newline. Let parser detect EOF later */ 557eef1b955SJung-uk Kim 558eef1b955SJung-uk Kim c = '\n'; 559eef1b955SJung-uk Kim } 560eef1b955SJung-uk Kim 561eef1b955SJung-uk Kim AslInsertLineBuffer (c); 562eef1b955SJung-uk Kim return (TRUE); 563eef1b955SJung-uk Kim } 564eef1b955SJung-uk Kim 565eef1b955SJung-uk Kim 566eef1b955SJung-uk Kim /******************************************************************************* 567eef1b955SJung-uk Kim * 568eef1b955SJung-uk Kim * FUNCTION: AslDoStringLiteral 569eef1b955SJung-uk Kim * 570eef1b955SJung-uk Kim * PARAMETERS: none 571eef1b955SJung-uk Kim * 572eef1b955SJung-uk Kim * RETURN: none 573eef1b955SJung-uk Kim * 574eef1b955SJung-uk Kim * DESCRIPTION: Process a string literal (surrounded by quotes) 575eef1b955SJung-uk Kim * 576eef1b955SJung-uk Kim ******************************************************************************/ 577eef1b955SJung-uk Kim 578eef1b955SJung-uk Kim static char 579eef1b955SJung-uk Kim AslDoStringLiteral ( 580eef1b955SJung-uk Kim void) 581eef1b955SJung-uk Kim { 582eef1b955SJung-uk Kim char *StringBuffer = MsgBuffer; 583eef1b955SJung-uk Kim char *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE; 584eef1b955SJung-uk Kim char *CleanString; 585f38b0f21SJung-uk Kim int StringChar; 586eef1b955SJung-uk Kim UINT32 State = ASL_NORMAL_CHAR; 587eef1b955SJung-uk Kim UINT32 i = 0; 588eef1b955SJung-uk Kim UINT8 Digit; 589eef1b955SJung-uk Kim char ConvertBuffer[4]; 590eef1b955SJung-uk Kim 591eef1b955SJung-uk Kim 592eef1b955SJung-uk Kim /* 593eef1b955SJung-uk Kim * Eat chars until end-of-literal. 594eef1b955SJung-uk Kim * NOTE: Put back the original surrounding quotes into the 595eef1b955SJung-uk Kim * source line buffer. 596eef1b955SJung-uk Kim */ 597eef1b955SJung-uk Kim AslInsertLineBuffer ('\"'); 598f38b0f21SJung-uk Kim while ((StringChar = input()) != EOF) 599eef1b955SJung-uk Kim { 600eef1b955SJung-uk Kim AslInsertLineBuffer (StringChar); 601eef1b955SJung-uk Kim 602eef1b955SJung-uk Kim DoCharacter: 603eef1b955SJung-uk Kim switch (State) 604eef1b955SJung-uk Kim { 605eef1b955SJung-uk Kim case ASL_NORMAL_CHAR: 606eef1b955SJung-uk Kim 607eef1b955SJung-uk Kim switch (StringChar) 608eef1b955SJung-uk Kim { 609eef1b955SJung-uk Kim case '\\': 610eef1b955SJung-uk Kim /* 611eef1b955SJung-uk Kim * Special handling for backslash-escape sequence. We will 612eef1b955SJung-uk Kim * toss the backslash and translate the escape char(s). 613eef1b955SJung-uk Kim */ 614eef1b955SJung-uk Kim State = ASL_ESCAPE_SEQUENCE; 615eef1b955SJung-uk Kim continue; 616eef1b955SJung-uk Kim 617eef1b955SJung-uk Kim case '\"': 618eef1b955SJung-uk Kim 619eef1b955SJung-uk Kim /* String terminator */ 620eef1b955SJung-uk Kim 621eef1b955SJung-uk Kim goto CompletedString; 6229c48c75eSJung-uk Kim 6239c48c75eSJung-uk Kim default: 624a9d8d09cSJung-uk Kim 6259c48c75eSJung-uk Kim break; 626eef1b955SJung-uk Kim } 627eef1b955SJung-uk Kim break; 628eef1b955SJung-uk Kim 629eef1b955SJung-uk Kim 630eef1b955SJung-uk Kim case ASL_ESCAPE_SEQUENCE: 631eef1b955SJung-uk Kim 632eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 633eef1b955SJung-uk Kim switch (StringChar) 634eef1b955SJung-uk Kim { 635eef1b955SJung-uk Kim case 'a': 636a9d8d09cSJung-uk Kim 637eef1b955SJung-uk Kim StringChar = 0x07; /* BELL */ 638eef1b955SJung-uk Kim break; 639eef1b955SJung-uk Kim 640eef1b955SJung-uk Kim case 'b': 641a9d8d09cSJung-uk Kim 642eef1b955SJung-uk Kim StringChar = 0x08; /* BACKSPACE */ 643eef1b955SJung-uk Kim break; 644eef1b955SJung-uk Kim 645eef1b955SJung-uk Kim case 'f': 646a9d8d09cSJung-uk Kim 647eef1b955SJung-uk Kim StringChar = 0x0C; /* FORMFEED */ 648eef1b955SJung-uk Kim break; 649eef1b955SJung-uk Kim 650eef1b955SJung-uk Kim case 'n': 651a9d8d09cSJung-uk Kim 652eef1b955SJung-uk Kim StringChar = 0x0A; /* LINEFEED */ 653eef1b955SJung-uk Kim break; 654eef1b955SJung-uk Kim 655eef1b955SJung-uk Kim case 'r': 656a9d8d09cSJung-uk Kim 657eef1b955SJung-uk Kim StringChar = 0x0D; /* CARRIAGE RETURN*/ 658eef1b955SJung-uk Kim break; 659eef1b955SJung-uk Kim 660eef1b955SJung-uk Kim case 't': 661a9d8d09cSJung-uk Kim 662eef1b955SJung-uk Kim StringChar = 0x09; /* HORIZONTAL TAB */ 663eef1b955SJung-uk Kim break; 664eef1b955SJung-uk Kim 665eef1b955SJung-uk Kim case 'v': 666a9d8d09cSJung-uk Kim 667eef1b955SJung-uk Kim StringChar = 0x0B; /* VERTICAL TAB */ 668eef1b955SJung-uk Kim break; 669eef1b955SJung-uk Kim 670eef1b955SJung-uk Kim case 'x': 671a9d8d09cSJung-uk Kim 672eef1b955SJung-uk Kim State = ASL_HEX_CONSTANT; 673eef1b955SJung-uk Kim i = 0; 674eef1b955SJung-uk Kim continue; 675eef1b955SJung-uk Kim 676eef1b955SJung-uk Kim case '\'': /* Single Quote */ 677eef1b955SJung-uk Kim case '\"': /* Double Quote */ 678eef1b955SJung-uk Kim case '\\': /* Backslash */ 679a9d8d09cSJung-uk Kim 680eef1b955SJung-uk Kim break; 681eef1b955SJung-uk Kim 682eef1b955SJung-uk Kim default: 683eef1b955SJung-uk Kim 684eef1b955SJung-uk Kim /* Check for an octal digit (0-7) */ 685eef1b955SJung-uk Kim 686eef1b955SJung-uk Kim if (ACPI_IS_OCTAL_DIGIT (StringChar)) 687eef1b955SJung-uk Kim { 688eef1b955SJung-uk Kim State = ASL_OCTAL_CONSTANT; 689eef1b955SJung-uk Kim ConvertBuffer[0] = StringChar; 690eef1b955SJung-uk Kim i = 1; 691eef1b955SJung-uk Kim continue; 692eef1b955SJung-uk Kim } 693eef1b955SJung-uk Kim 694eef1b955SJung-uk Kim /* Unknown escape sequence issue warning, but use the character */ 695eef1b955SJung-uk Kim 696eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_ESCAPE, 697eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 698eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 699eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 700eef1b955SJung-uk Kim break; 701eef1b955SJung-uk Kim } 702eef1b955SJung-uk Kim break; 703eef1b955SJung-uk Kim 704eef1b955SJung-uk Kim 705eef1b955SJung-uk Kim case ASL_OCTAL_CONSTANT: 706eef1b955SJung-uk Kim 707eef1b955SJung-uk Kim /* Up to three octal digits allowed */ 708eef1b955SJung-uk Kim 709eef1b955SJung-uk Kim if (!ACPI_IS_OCTAL_DIGIT (StringChar) || 710eef1b955SJung-uk Kim (i > 2)) 711eef1b955SJung-uk Kim { 712eef1b955SJung-uk Kim /* 713eef1b955SJung-uk Kim * Reached end of the constant. Convert the assembled ASCII 714eef1b955SJung-uk Kim * string and resume processing of the next character 715eef1b955SJung-uk Kim */ 716eef1b955SJung-uk Kim ConvertBuffer[i] = 0; 717*5ef50723SJung-uk Kim Digit = (UINT8) strtoul (ConvertBuffer, NULL, 8); 718eef1b955SJung-uk Kim 719eef1b955SJung-uk Kim /* Check for NULL or non-ascii character (ignore if so) */ 720eef1b955SJung-uk Kim 721eef1b955SJung-uk Kim if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) 722eef1b955SJung-uk Kim { 723eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, 724eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 725eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 726eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 727eef1b955SJung-uk Kim } 728eef1b955SJung-uk Kim else 729eef1b955SJung-uk Kim { 730eef1b955SJung-uk Kim *StringBuffer = (char) Digit; 731eef1b955SJung-uk Kim StringBuffer++; 732eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 733eef1b955SJung-uk Kim { 734eef1b955SJung-uk Kim goto BufferOverflow; 735eef1b955SJung-uk Kim } 736eef1b955SJung-uk Kim } 737eef1b955SJung-uk Kim 738eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 739eef1b955SJung-uk Kim goto DoCharacter; 740eef1b955SJung-uk Kim break; 741eef1b955SJung-uk Kim } 742eef1b955SJung-uk Kim 743eef1b955SJung-uk Kim /* Append another digit of the constant */ 744eef1b955SJung-uk Kim 745eef1b955SJung-uk Kim ConvertBuffer[i] = StringChar; 746eef1b955SJung-uk Kim i++; 747eef1b955SJung-uk Kim continue; 748eef1b955SJung-uk Kim 749eef1b955SJung-uk Kim case ASL_HEX_CONSTANT: 750eef1b955SJung-uk Kim 751eef1b955SJung-uk Kim /* Up to two hex digits allowed */ 752eef1b955SJung-uk Kim 753*5ef50723SJung-uk Kim if (!isxdigit (StringChar) || 754eef1b955SJung-uk Kim (i > 1)) 755eef1b955SJung-uk Kim { 756eef1b955SJung-uk Kim /* 757eef1b955SJung-uk Kim * Reached end of the constant. Convert the assembled ASCII 758eef1b955SJung-uk Kim * string and resume processing of the next character 759eef1b955SJung-uk Kim */ 760eef1b955SJung-uk Kim ConvertBuffer[i] = 0; 761*5ef50723SJung-uk Kim Digit = (UINT8) strtoul (ConvertBuffer, NULL, 16); 762eef1b955SJung-uk Kim 763eef1b955SJung-uk Kim /* Check for NULL or non-ascii character (ignore if so) */ 764eef1b955SJung-uk Kim 765eef1b955SJung-uk Kim if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) 766eef1b955SJung-uk Kim { 767eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, 768eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 769eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 770eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 771eef1b955SJung-uk Kim } 772eef1b955SJung-uk Kim else 773eef1b955SJung-uk Kim { 774eef1b955SJung-uk Kim *StringBuffer = (char) Digit; 775eef1b955SJung-uk Kim StringBuffer++; 776eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 777eef1b955SJung-uk Kim { 778eef1b955SJung-uk Kim goto BufferOverflow; 779eef1b955SJung-uk Kim } 780eef1b955SJung-uk Kim } 781eef1b955SJung-uk Kim 782eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 783eef1b955SJung-uk Kim goto DoCharacter; 784eef1b955SJung-uk Kim break; 785eef1b955SJung-uk Kim } 786eef1b955SJung-uk Kim 787eef1b955SJung-uk Kim /* Append another digit of the constant */ 788eef1b955SJung-uk Kim 789eef1b955SJung-uk Kim ConvertBuffer[i] = StringChar; 790eef1b955SJung-uk Kim i++; 791eef1b955SJung-uk Kim continue; 7929c48c75eSJung-uk Kim 7939c48c75eSJung-uk Kim default: 794a9d8d09cSJung-uk Kim 7959c48c75eSJung-uk Kim break; 796eef1b955SJung-uk Kim } 797eef1b955SJung-uk Kim 798eef1b955SJung-uk Kim /* Save the finished character */ 799eef1b955SJung-uk Kim 800eef1b955SJung-uk Kim *StringBuffer = StringChar; 801eef1b955SJung-uk Kim StringBuffer++; 802eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 803eef1b955SJung-uk Kim { 804eef1b955SJung-uk Kim goto BufferOverflow; 805eef1b955SJung-uk Kim } 806eef1b955SJung-uk Kim } 807eef1b955SJung-uk Kim 808eef1b955SJung-uk Kim /* 809eef1b955SJung-uk Kim * Premature End-Of-File 810eef1b955SJung-uk Kim */ 811eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, 812eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 813eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 814eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 815eef1b955SJung-uk Kim return (FALSE); 816eef1b955SJung-uk Kim 817eef1b955SJung-uk Kim 818eef1b955SJung-uk Kim CompletedString: 819eef1b955SJung-uk Kim /* 820eef1b955SJung-uk Kim * Null terminate the input string and copy string to a new buffer 821eef1b955SJung-uk Kim */ 822eef1b955SJung-uk Kim *StringBuffer = 0; 823eef1b955SJung-uk Kim 824313a0c13SJung-uk Kim CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1); 825eef1b955SJung-uk Kim if (!CleanString) 826eef1b955SJung-uk Kim { 827eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, 828eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 829eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 830eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 831eef1b955SJung-uk Kim return (FALSE); 832eef1b955SJung-uk Kim } 833eef1b955SJung-uk Kim 834*5ef50723SJung-uk Kim strcpy (CleanString, MsgBuffer); 835eef1b955SJung-uk Kim AslCompilerlval.s = CleanString; 836eef1b955SJung-uk Kim return (TRUE); 837eef1b955SJung-uk Kim 838eef1b955SJung-uk Kim 839eef1b955SJung-uk Kim BufferOverflow: 840eef1b955SJung-uk Kim 841eef1b955SJung-uk Kim /* Literal was too long */ 842eef1b955SJung-uk Kim 843eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH, 844eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 845eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 846eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096"); 847eef1b955SJung-uk Kim return (FALSE); 848eef1b955SJung-uk Kim } 849