Home | History | Annotate | Line # | Download | only in acpisrc
asremove.c revision 1.1.1.13
      1       1.1    jruoho /******************************************************************************
      2       1.1    jruoho  *
      3       1.1    jruoho  * Module Name: asremove - Source conversion - removal functions
      4       1.1    jruoho  *
      5       1.1    jruoho  *****************************************************************************/
      6       1.1    jruoho 
      7   1.1.1.2    jruoho /*
      8  1.1.1.12  christos  * Copyright (C) 2000 - 2019, Intel Corp.
      9       1.1    jruoho  * All rights reserved.
     10       1.1    jruoho  *
     11   1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12   1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13   1.1.1.2    jruoho  * are met:
     14   1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15   1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16   1.1.1.2    jruoho  *    without modification.
     17   1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18   1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19   1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20   1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21   1.1.1.2    jruoho  *    binary redistribution.
     22   1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23   1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24   1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25   1.1.1.2    jruoho  *
     26   1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27   1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28   1.1.1.2    jruoho  * Software Foundation.
     29   1.1.1.2    jruoho  *
     30   1.1.1.2    jruoho  * NO WARRANTY
     31   1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32   1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33   1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34   1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35   1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36   1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37   1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38   1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39   1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40   1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41   1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42   1.1.1.2    jruoho  */
     43       1.1    jruoho 
     44       1.1    jruoho #include "acpisrc.h"
     45       1.1    jruoho 
     46       1.1    jruoho /* Local prototypes */
     47       1.1    jruoho 
     48       1.1    jruoho void
     49       1.1    jruoho AsRemoveStatement (
     50       1.1    jruoho     char                    *Buffer,
     51       1.1    jruoho     char                    *Keyword,
     52       1.1    jruoho     UINT32                  Type);
     53       1.1    jruoho 
     54       1.1    jruoho 
     55       1.1    jruoho /******************************************************************************
     56       1.1    jruoho  *
     57       1.1    jruoho  * FUNCTION:    AsRemoveStatement
     58       1.1    jruoho  *
     59       1.1    jruoho  * DESCRIPTION: Remove all statements that contain the given keyword.
     60       1.1    jruoho  *              Limitations:  Removes text from the start of the line that
     61   1.1.1.3  christos  *              contains the keyword to the next semicolon. Currently
     62       1.1    jruoho  *              doesn't ignore comments.
     63       1.1    jruoho  *
     64       1.1    jruoho  ******************************************************************************/
     65       1.1    jruoho 
     66       1.1    jruoho void
     67       1.1    jruoho AsRemoveStatement (
     68       1.1    jruoho     char                    *Buffer,
     69       1.1    jruoho     char                    *Keyword,
     70       1.1    jruoho     UINT32                  Type)
     71       1.1    jruoho {
     72       1.1    jruoho     char                    *SubString;
     73       1.1    jruoho     char                    *SubBuffer;
     74       1.1    jruoho     int                     KeywordLength;
     75       1.1    jruoho 
     76       1.1    jruoho 
     77       1.1    jruoho     KeywordLength = strlen (Keyword);
     78       1.1    jruoho     SubBuffer = Buffer;
     79       1.1    jruoho     SubString = Buffer;
     80       1.1    jruoho 
     81       1.1    jruoho     while (SubString)
     82       1.1    jruoho     {
     83       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
     84       1.1    jruoho 
     85       1.1    jruoho         if (SubString)
     86       1.1    jruoho         {
     87       1.1    jruoho             SubBuffer = SubString;
     88       1.1    jruoho 
     89       1.1    jruoho             if ((Type == REPLACE_WHOLE_WORD) &&
     90       1.1    jruoho                 (!AsMatchExactWord (SubString, KeywordLength)))
     91       1.1    jruoho             {
     92       1.1    jruoho                 SubBuffer++;
     93       1.1    jruoho                 continue;
     94       1.1    jruoho             }
     95       1.1    jruoho 
     96       1.1    jruoho             /* Find start of this line */
     97       1.1    jruoho 
     98       1.1    jruoho             while (*SubString != '\n')
     99       1.1    jruoho             {
    100       1.1    jruoho                 SubString--;
    101       1.1    jruoho             }
    102       1.1    jruoho             SubString++;
    103       1.1    jruoho 
    104       1.1    jruoho             /* Find end of this statement */
    105       1.1    jruoho 
    106       1.1    jruoho             SubBuffer = AsSkipPastChar (SubBuffer, ';');
    107       1.1    jruoho             if (!SubBuffer)
    108       1.1    jruoho             {
    109       1.1    jruoho                 return;
    110       1.1    jruoho             }
    111       1.1    jruoho 
    112       1.1    jruoho             /* Find end of this line */
    113       1.1    jruoho 
    114       1.1    jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\n');
    115       1.1    jruoho             if (!SubBuffer)
    116       1.1    jruoho             {
    117       1.1    jruoho                 return;
    118       1.1    jruoho             }
    119       1.1    jruoho 
    120       1.1    jruoho             /* If next line is blank, remove it too */
    121       1.1    jruoho 
    122       1.1    jruoho             if (*SubBuffer == '\n')
    123       1.1    jruoho             {
    124       1.1    jruoho                 SubBuffer++;
    125       1.1    jruoho             }
    126       1.1    jruoho 
    127       1.1    jruoho             /* Remove the lines */
    128       1.1    jruoho 
    129       1.1    jruoho             SubBuffer = AsRemoveData (SubString, SubBuffer);
    130       1.1    jruoho         }
    131       1.1    jruoho     }
    132       1.1    jruoho }
    133       1.1    jruoho 
    134       1.1    jruoho 
    135       1.1    jruoho /******************************************************************************
    136       1.1    jruoho  *
    137       1.1    jruoho  * FUNCTION:    AsRemoveConditionalCompile
    138       1.1    jruoho  *
    139       1.1    jruoho  * DESCRIPTION: Remove a "#ifdef" statement, and all text that it encompasses.
    140       1.1    jruoho  *              Limitations: cannot handle nested ifdefs.
    141       1.1    jruoho  *
    142       1.1    jruoho  ******************************************************************************/
    143       1.1    jruoho 
    144       1.1    jruoho void
    145       1.1    jruoho AsRemoveConditionalCompile (
    146       1.1    jruoho     char                    *Buffer,
    147       1.1    jruoho     char                    *Keyword)
    148       1.1    jruoho {
    149       1.1    jruoho     char                    *SubString;
    150       1.1    jruoho     char                    *SubBuffer;
    151       1.1    jruoho     char                    *IfPtr;
    152       1.1    jruoho     char                    *EndifPtr;
    153       1.1    jruoho     char                    *ElsePtr;
    154       1.1    jruoho     char                    *Comment;
    155       1.1    jruoho     int                     KeywordLength;
    156       1.1    jruoho 
    157       1.1    jruoho 
    158       1.1    jruoho     KeywordLength = strlen (Keyword);
    159       1.1    jruoho     SubString = Buffer;
    160       1.1    jruoho 
    161       1.1    jruoho     while (SubString)
    162       1.1    jruoho     {
    163       1.1    jruoho         SubBuffer = strstr (SubString, Keyword);
    164       1.1    jruoho         if (!SubBuffer)
    165       1.1    jruoho         {
    166       1.1    jruoho             return;
    167       1.1    jruoho         }
    168       1.1    jruoho 
    169       1.1    jruoho         /*
    170       1.1    jruoho          * Check for translation escape string -- means to ignore
    171       1.1    jruoho          * blocks of code while replacing
    172       1.1    jruoho          */
    173   1.1.1.3  christos         if (Gbl_IgnoreTranslationEscapes)
    174   1.1.1.3  christos         {
    175   1.1.1.3  christos             Comment = NULL;
    176   1.1.1.3  christos         }
    177   1.1.1.3  christos         else
    178   1.1.1.3  christos         {
    179   1.1.1.3  christos             Comment = strstr (SubString, AS_START_IGNORE);
    180   1.1.1.3  christos         }
    181       1.1    jruoho 
    182       1.1    jruoho         if ((Comment) &&
    183       1.1    jruoho             (Comment < SubBuffer))
    184       1.1    jruoho         {
    185       1.1    jruoho             SubString = strstr (Comment, AS_STOP_IGNORE);
    186       1.1    jruoho             if (!SubString)
    187       1.1    jruoho             {
    188       1.1    jruoho                 return;
    189       1.1    jruoho             }
    190       1.1    jruoho 
    191       1.1    jruoho             SubString += 3;
    192       1.1    jruoho             continue;
    193       1.1    jruoho         }
    194       1.1    jruoho 
    195       1.1    jruoho         /* Check for ordinary comment */
    196       1.1    jruoho 
    197       1.1    jruoho         Comment = strstr (SubString, "/*");
    198       1.1    jruoho 
    199       1.1    jruoho         if ((Comment) &&
    200       1.1    jruoho             (Comment < SubBuffer))
    201       1.1    jruoho         {
    202       1.1    jruoho             SubString = strstr (Comment, "*/");
    203       1.1    jruoho             if (!SubString)
    204       1.1    jruoho             {
    205       1.1    jruoho                 return;
    206       1.1    jruoho             }
    207       1.1    jruoho 
    208       1.1    jruoho             SubString += 2;
    209       1.1    jruoho             continue;
    210       1.1    jruoho         }
    211       1.1    jruoho 
    212       1.1    jruoho         SubString = SubBuffer;
    213       1.1    jruoho         if (!AsMatchExactWord (SubString, KeywordLength))
    214       1.1    jruoho         {
    215       1.1    jruoho             SubString++;
    216       1.1    jruoho             continue;
    217       1.1    jruoho         }
    218       1.1    jruoho 
    219       1.1    jruoho         /* Find start of this line */
    220       1.1    jruoho 
    221       1.1    jruoho         while (*SubString != '\n' && (SubString > Buffer))
    222       1.1    jruoho         {
    223       1.1    jruoho             SubString--;
    224       1.1    jruoho         }
    225   1.1.1.7  christos 
    226       1.1    jruoho         SubString++;
    227       1.1    jruoho 
    228       1.1    jruoho         /* Find the "#ifxxxx" */
    229       1.1    jruoho 
    230       1.1    jruoho         IfPtr = strstr (SubString, "#if");
    231       1.1    jruoho         if (!IfPtr)
    232       1.1    jruoho         {
    233       1.1    jruoho             return;
    234       1.1    jruoho         }
    235       1.1    jruoho 
    236       1.1    jruoho         if (IfPtr > SubBuffer)
    237       1.1    jruoho         {
    238       1.1    jruoho             /* Not the right #if */
    239       1.1    jruoho 
    240       1.1    jruoho             SubString = SubBuffer + strlen (Keyword);
    241       1.1    jruoho             continue;
    242       1.1    jruoho         }
    243       1.1    jruoho 
    244       1.1    jruoho         /* Find closing #endif or #else */
    245       1.1    jruoho 
    246       1.1    jruoho         EndifPtr = strstr (SubBuffer, "#endif");
    247       1.1    jruoho         if (!EndifPtr)
    248       1.1    jruoho         {
    249       1.1    jruoho             /* There has to be an #endif */
    250       1.1    jruoho 
    251       1.1    jruoho             return;
    252       1.1    jruoho         }
    253       1.1    jruoho 
    254       1.1    jruoho         ElsePtr = strstr (SubBuffer, "#else");
    255       1.1    jruoho         if ((ElsePtr) &&
    256       1.1    jruoho             (EndifPtr > ElsePtr))
    257       1.1    jruoho         {
    258       1.1    jruoho             /* This #ifdef contains an #else clause */
    259       1.1    jruoho             /* Find end of this line */
    260       1.1    jruoho 
    261       1.1    jruoho             SubBuffer = AsSkipPastChar (ElsePtr, '\n');
    262       1.1    jruoho             if (!SubBuffer)
    263       1.1    jruoho             {
    264       1.1    jruoho                 return;
    265       1.1    jruoho             }
    266       1.1    jruoho 
    267       1.1    jruoho             /* Remove the #ifdef .... #else code */
    268       1.1    jruoho 
    269       1.1    jruoho             AsRemoveData (SubString, SubBuffer);
    270       1.1    jruoho 
    271       1.1    jruoho             /* Next, we will remove the #endif statement */
    272       1.1    jruoho 
    273       1.1    jruoho             EndifPtr = strstr (SubString, "#endif");
    274       1.1    jruoho             if (!EndifPtr)
    275       1.1    jruoho             {
    276       1.1    jruoho                 /* There has to be an #endif */
    277       1.1    jruoho 
    278       1.1    jruoho                 return;
    279       1.1    jruoho             }
    280       1.1    jruoho 
    281       1.1    jruoho             SubString = EndifPtr;
    282       1.1    jruoho         }
    283       1.1    jruoho 
    284       1.1    jruoho         /* Remove the ... #endif part */
    285       1.1    jruoho         /* Find end of this line */
    286       1.1    jruoho 
    287       1.1    jruoho         SubBuffer = AsSkipPastChar (EndifPtr, '\n');
    288       1.1    jruoho         if (!SubBuffer)
    289       1.1    jruoho         {
    290       1.1    jruoho             return;
    291       1.1    jruoho         }
    292       1.1    jruoho 
    293       1.1    jruoho         /* Remove the lines */
    294       1.1    jruoho 
    295  1.1.1.13  christos         (void) AsRemoveData (SubString, SubBuffer);
    296       1.1    jruoho     }
    297       1.1    jruoho }
    298       1.1    jruoho 
    299       1.1    jruoho 
    300   1.1.1.6  christos #ifdef _OBSOLETE_FUNCTIONS
    301       1.1    jruoho /******************************************************************************
    302       1.1    jruoho  *
    303       1.1    jruoho  * FUNCTION:    AsRemoveMacro
    304       1.1    jruoho  *
    305   1.1.1.3  christos  * DESCRIPTION: Remove every line that contains the keyword. Does not
    306       1.1    jruoho  *              skip comments.
    307       1.1    jruoho  *
    308       1.1    jruoho  ******************************************************************************/
    309       1.1    jruoho 
    310   1.1.1.6  christos NOTE: This function is no longer used and is commented out for now.
    311   1.1.1.6  christos 
    312   1.1.1.6  christos Also, it appears to have one or more bugs in it. It can incorrectly remove
    313   1.1.1.6  christos lines of code, producing some garbage.
    314   1.1.1.6  christos 
    315       1.1    jruoho void
    316       1.1    jruoho AsRemoveMacro (
    317       1.1    jruoho     char                    *Buffer,
    318       1.1    jruoho     char                    *Keyword)
    319       1.1    jruoho {
    320       1.1    jruoho     char                    *SubString;
    321       1.1    jruoho     char                    *SubBuffer;
    322       1.1    jruoho     int                     NestLevel;
    323       1.1    jruoho 
    324       1.1    jruoho 
    325       1.1    jruoho     SubBuffer = Buffer;
    326       1.1    jruoho     SubString = Buffer;
    327       1.1    jruoho 
    328       1.1    jruoho     while (SubString)
    329       1.1    jruoho     {
    330       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    331       1.1    jruoho 
    332       1.1    jruoho         if (SubString)
    333       1.1    jruoho         {
    334       1.1    jruoho             SubBuffer = SubString;
    335       1.1    jruoho 
    336       1.1    jruoho             /* Find start of the macro parameters */
    337       1.1    jruoho 
    338       1.1    jruoho             while (*SubString != '(')
    339       1.1    jruoho             {
    340       1.1    jruoho                 SubString++;
    341       1.1    jruoho             }
    342       1.1    jruoho             SubString++;
    343       1.1    jruoho 
    344       1.1    jruoho             /* Remove the macro name and opening paren */
    345       1.1    jruoho 
    346       1.1    jruoho             SubString = AsRemoveData (SubBuffer, SubString);
    347       1.1    jruoho 
    348       1.1    jruoho             NestLevel = 1;
    349       1.1    jruoho             while (*SubString)
    350       1.1    jruoho             {
    351       1.1    jruoho                 if (*SubString == '(')
    352       1.1    jruoho                 {
    353       1.1    jruoho                     NestLevel++;
    354       1.1    jruoho                 }
    355       1.1    jruoho                 else if (*SubString == ')')
    356       1.1    jruoho                 {
    357       1.1    jruoho                     NestLevel--;
    358       1.1    jruoho                 }
    359       1.1    jruoho 
    360       1.1    jruoho                 SubString++;
    361       1.1    jruoho 
    362       1.1    jruoho                 if (NestLevel == 0)
    363       1.1    jruoho                 {
    364       1.1    jruoho                     break;
    365       1.1    jruoho                 }
    366       1.1    jruoho             }
    367       1.1    jruoho 
    368       1.1    jruoho             /* Remove the closing paren */
    369       1.1    jruoho 
    370       1.1    jruoho             SubBuffer = AsRemoveData (SubString-1, SubString);
    371       1.1    jruoho         }
    372       1.1    jruoho     }
    373       1.1    jruoho }
    374   1.1.1.6  christos #endif
    375       1.1    jruoho 
    376       1.1    jruoho /******************************************************************************
    377       1.1    jruoho  *
    378       1.1    jruoho  * FUNCTION:    AsRemoveLine
    379       1.1    jruoho  *
    380   1.1.1.3  christos  * DESCRIPTION: Remove every line that contains the keyword. Does not
    381       1.1    jruoho  *              skip comments.
    382       1.1    jruoho  *
    383       1.1    jruoho  ******************************************************************************/
    384       1.1    jruoho 
    385       1.1    jruoho void
    386       1.1    jruoho AsRemoveLine (
    387       1.1    jruoho     char                    *Buffer,
    388       1.1    jruoho     char                    *Keyword)
    389       1.1    jruoho {
    390       1.1    jruoho     char                    *SubString;
    391       1.1    jruoho     char                    *SubBuffer;
    392       1.1    jruoho 
    393       1.1    jruoho 
    394       1.1    jruoho     SubBuffer = Buffer;
    395       1.1    jruoho     SubString = Buffer;
    396       1.1    jruoho 
    397       1.1    jruoho     while (SubString)
    398       1.1    jruoho     {
    399       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    400       1.1    jruoho 
    401       1.1    jruoho         if (SubString)
    402       1.1    jruoho         {
    403       1.1    jruoho             SubBuffer = SubString;
    404       1.1    jruoho 
    405       1.1    jruoho             /* Find start of this line */
    406       1.1    jruoho 
    407       1.1    jruoho             while (*SubString != '\n')
    408       1.1    jruoho             {
    409       1.1    jruoho                 SubString--;
    410       1.1    jruoho             }
    411       1.1    jruoho             SubString++;
    412       1.1    jruoho 
    413       1.1    jruoho             /* Find end of this line */
    414       1.1    jruoho 
    415       1.1    jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\n');
    416       1.1    jruoho             if (!SubBuffer)
    417       1.1    jruoho             {
    418       1.1    jruoho                 return;
    419       1.1    jruoho             }
    420       1.1    jruoho 
    421       1.1    jruoho             /* Remove the line */
    422       1.1    jruoho 
    423       1.1    jruoho             SubBuffer = AsRemoveData (SubString, SubBuffer);
    424       1.1    jruoho         }
    425       1.1    jruoho     }
    426       1.1    jruoho }
    427       1.1    jruoho 
    428       1.1    jruoho 
    429       1.1    jruoho /******************************************************************************
    430       1.1    jruoho  *
    431       1.1    jruoho  * FUNCTION:    AsReduceTypedefs
    432       1.1    jruoho  *
    433       1.1    jruoho  * DESCRIPTION: Eliminate certain typedefs
    434       1.1    jruoho  *
    435       1.1    jruoho  ******************************************************************************/
    436       1.1    jruoho 
    437       1.1    jruoho void
    438       1.1    jruoho AsReduceTypedefs (
    439       1.1    jruoho     char                    *Buffer,
    440       1.1    jruoho     char                    *Keyword)
    441       1.1    jruoho {
    442       1.1    jruoho     char                    *SubString;
    443       1.1    jruoho     char                    *SubBuffer;
    444  1.1.1.10  christos     char                    *SubSubString;
    445       1.1    jruoho     int                     NestLevel;
    446       1.1    jruoho 
    447       1.1    jruoho 
    448       1.1    jruoho     SubBuffer = Buffer;
    449       1.1    jruoho     SubString = Buffer;
    450       1.1    jruoho 
    451       1.1    jruoho     while (SubString)
    452       1.1    jruoho     {
    453       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    454       1.1    jruoho 
    455       1.1    jruoho         if (SubString)
    456       1.1    jruoho         {
    457  1.1.1.10  christos             SubSubString = SubString + strlen (Keyword);
    458       1.1    jruoho 
    459  1.1.1.10  christos             /* skip spaces */
    460       1.1    jruoho 
    461  1.1.1.10  christos             while (strchr(" \t\r\n", *SubSubString))
    462  1.1.1.10  christos             {
    463  1.1.1.10  christos                 SubSubString++;
    464  1.1.1.10  christos             }
    465  1.1.1.10  christos 
    466  1.1.1.10  christos             /* skip type name */
    467       1.1    jruoho 
    468  1.1.1.10  christos             while (!strchr(" \t\r\n", *SubSubString))
    469       1.1    jruoho             {
    470  1.1.1.10  christos                 SubSubString++;
    471       1.1    jruoho             }
    472       1.1    jruoho 
    473  1.1.1.10  christos             /* skip spaces */
    474       1.1    jruoho 
    475  1.1.1.10  christos             while (strchr(" \t\r\n", *SubSubString))
    476  1.1.1.10  christos             {
    477  1.1.1.10  christos                 SubSubString++;
    478  1.1.1.10  christos             }
    479  1.1.1.10  christos 
    480  1.1.1.10  christos             if (*SubSubString == '{')
    481       1.1    jruoho             {
    482  1.1.1.10  christos                 /* Remove the typedef itself */
    483  1.1.1.10  christos 
    484  1.1.1.10  christos                 SubBuffer = SubString + strlen ("typedef") + 1;
    485  1.1.1.13  christos                 (void) AsRemoveData (SubString, SubBuffer);
    486  1.1.1.10  christos 
    487  1.1.1.10  christos                 /* Find the opening brace of the struct or union */
    488  1.1.1.10  christos 
    489  1.1.1.10  christos                 while (*SubString != '{')
    490       1.1    jruoho                 {
    491  1.1.1.10  christos                     SubString++;
    492       1.1    jruoho                 }
    493  1.1.1.10  christos                 SubString++;
    494  1.1.1.10  christos 
    495  1.1.1.10  christos                 /* Find the closing brace. Handles nested braces */
    496  1.1.1.10  christos 
    497  1.1.1.10  christos                 NestLevel = 1;
    498  1.1.1.10  christos                 while (*SubString)
    499       1.1    jruoho                 {
    500  1.1.1.10  christos                     if (*SubString == '{')
    501  1.1.1.10  christos                     {
    502  1.1.1.10  christos                         NestLevel++;
    503  1.1.1.10  christos                     }
    504  1.1.1.10  christos                     else if (*SubString == '}')
    505  1.1.1.10  christos                     {
    506  1.1.1.10  christos                         NestLevel--;
    507  1.1.1.10  christos                     }
    508  1.1.1.10  christos 
    509  1.1.1.10  christos                     SubString++;
    510  1.1.1.10  christos 
    511  1.1.1.10  christos                     if (NestLevel == 0)
    512  1.1.1.10  christos                     {
    513  1.1.1.10  christos                         break;
    514  1.1.1.10  christos                     }
    515       1.1    jruoho                 }
    516       1.1    jruoho 
    517  1.1.1.10  christos                 /* Remove an extra line feed if present */
    518       1.1    jruoho 
    519  1.1.1.10  christos                 if (!strncmp (SubString - 3, "\n\n", 2))
    520       1.1    jruoho                 {
    521  1.1.1.10  christos                     *(SubString -2) = '}';
    522  1.1.1.10  christos                     SubString--;
    523       1.1    jruoho                 }
    524       1.1    jruoho 
    525  1.1.1.10  christos                 /* Find the end of the typedef name */
    526       1.1    jruoho 
    527  1.1.1.10  christos                 SubBuffer = AsSkipUntilChar (SubString, ';');
    528       1.1    jruoho 
    529  1.1.1.10  christos                 /* And remove the typedef name */
    530       1.1    jruoho 
    531  1.1.1.10  christos                 SubBuffer = AsRemoveData (SubString, SubBuffer);
    532  1.1.1.10  christos             }
    533  1.1.1.10  christos             else
    534  1.1.1.10  christos             {
    535  1.1.1.10  christos                 /* Skip the entire definition */
    536       1.1    jruoho 
    537  1.1.1.10  christos                 SubString = strchr (SubString, ';') + 1;
    538  1.1.1.10  christos                 SubBuffer = SubString;
    539  1.1.1.10  christos             }
    540       1.1    jruoho         }
    541       1.1    jruoho     }
    542       1.1    jruoho }
    543       1.1    jruoho 
    544       1.1    jruoho 
    545       1.1    jruoho /******************************************************************************
    546       1.1    jruoho  *
    547       1.1    jruoho  * FUNCTION:    AsRemoveEmptyBlocks
    548       1.1    jruoho  *
    549   1.1.1.3  christos  * DESCRIPTION: Remove any C blocks (e.g., if {}) that contain no code. This
    550       1.1    jruoho  *              can happen as a result of removing lines such as DEBUG_PRINT.
    551       1.1    jruoho  *
    552       1.1    jruoho  ******************************************************************************/
    553       1.1    jruoho 
    554       1.1    jruoho void
    555       1.1    jruoho AsRemoveEmptyBlocks (
    556       1.1    jruoho     char                    *Buffer,
    557       1.1    jruoho     char                    *Filename)
    558       1.1    jruoho {
    559       1.1    jruoho     char                    *SubBuffer;
    560       1.1    jruoho     char                    *BlockStart;
    561       1.1    jruoho     BOOLEAN                 EmptyBlock = TRUE;
    562       1.1    jruoho     BOOLEAN                 AnotherPassRequired = TRUE;
    563       1.1    jruoho     UINT32                  BlockCount = 0;
    564       1.1    jruoho 
    565       1.1    jruoho 
    566       1.1    jruoho     while (AnotherPassRequired)
    567       1.1    jruoho     {
    568       1.1    jruoho         SubBuffer = Buffer;
    569       1.1    jruoho         AnotherPassRequired = FALSE;
    570       1.1    jruoho 
    571       1.1    jruoho         while (*SubBuffer)
    572       1.1    jruoho         {
    573       1.1    jruoho             if (*SubBuffer == '{')
    574       1.1    jruoho             {
    575       1.1    jruoho                 BlockStart = SubBuffer;
    576       1.1    jruoho                 EmptyBlock = TRUE;
    577       1.1    jruoho 
    578       1.1    jruoho                 SubBuffer++;
    579       1.1    jruoho                 while (*SubBuffer != '}')
    580       1.1    jruoho                 {
    581       1.1    jruoho                     if ((*SubBuffer != ' ') &&
    582       1.1    jruoho                         (*SubBuffer != '\n'))
    583       1.1    jruoho                     {
    584       1.1    jruoho                         EmptyBlock = FALSE;
    585       1.1    jruoho                         break;
    586       1.1    jruoho                     }
    587   1.1.1.7  christos 
    588       1.1    jruoho                     SubBuffer++;
    589       1.1    jruoho                 }
    590       1.1    jruoho 
    591       1.1    jruoho                 if (EmptyBlock)
    592       1.1    jruoho                 {
    593       1.1    jruoho                     /* Find start of the first line of the block */
    594       1.1    jruoho 
    595       1.1    jruoho                     while (*BlockStart != '\n')
    596       1.1    jruoho                     {
    597       1.1    jruoho                         BlockStart--;
    598       1.1    jruoho                     }
    599       1.1    jruoho 
    600       1.1    jruoho                     /* Find end of the last line of the block */
    601       1.1    jruoho 
    602       1.1    jruoho                     SubBuffer = AsSkipUntilChar (SubBuffer, '\n');
    603       1.1    jruoho                     if (!SubBuffer)
    604       1.1    jruoho                     {
    605       1.1    jruoho                         break;
    606       1.1    jruoho                     }
    607       1.1    jruoho 
    608       1.1    jruoho                     /* Remove the block */
    609       1.1    jruoho 
    610       1.1    jruoho                     SubBuffer = AsRemoveData (BlockStart, SubBuffer);
    611       1.1    jruoho                     BlockCount++;
    612       1.1    jruoho                     AnotherPassRequired = TRUE;
    613       1.1    jruoho                     continue;
    614       1.1    jruoho                 }
    615       1.1    jruoho             }
    616       1.1    jruoho 
    617       1.1    jruoho             SubBuffer++;
    618       1.1    jruoho         }
    619       1.1    jruoho     }
    620       1.1    jruoho 
    621       1.1    jruoho     if (BlockCount)
    622       1.1    jruoho     {
    623       1.1    jruoho         Gbl_MadeChanges = TRUE;
    624       1.1    jruoho         AsPrint ("Code blocks deleted", BlockCount, Filename);
    625       1.1    jruoho     }
    626       1.1    jruoho }
    627       1.1    jruoho 
    628       1.1    jruoho 
    629       1.1    jruoho /******************************************************************************
    630       1.1    jruoho  *
    631       1.1    jruoho  * FUNCTION:    AsRemoveDebugMacros
    632       1.1    jruoho  *
    633       1.1    jruoho  * DESCRIPTION: Remove all "Debug" macros -- macros that produce debug output.
    634       1.1    jruoho  *
    635       1.1    jruoho  ******************************************************************************/
    636       1.1    jruoho 
    637       1.1    jruoho void
    638       1.1    jruoho AsRemoveDebugMacros (
    639       1.1    jruoho     char                    *Buffer)
    640       1.1    jruoho {
    641       1.1    jruoho     AsRemoveConditionalCompile (Buffer, "ACPI_DEBUG_OUTPUT");
    642       1.1    jruoho 
    643       1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT",      REPLACE_WHOLE_WORD);
    644       1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT_RAW",  REPLACE_WHOLE_WORD);
    645       1.1    jruoho     AsRemoveStatement (Buffer, "DEBUG_EXEC",            REPLACE_WHOLE_WORD);
    646       1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_ENTRY",        REPLACE_WHOLE_WORD);
    647       1.1    jruoho     AsRemoveStatement (Buffer, "PROC_NAME",             REPLACE_WHOLE_WORD);
    648       1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_TRACE",        REPLACE_SUBSTRINGS);
    649       1.1    jruoho     AsRemoveStatement (Buffer, "DUMP_",                 REPLACE_SUBSTRINGS);
    650       1.1    jruoho 
    651       1.1    jruoho     AsReplaceString ("return_VOID",         "return", REPLACE_WHOLE_WORD, Buffer);
    652       1.1    jruoho     AsReplaceString ("return_PTR",          "return", REPLACE_WHOLE_WORD, Buffer);
    653   1.1.1.8  christos     AsReplaceString ("return_STR",          "return", REPLACE_WHOLE_WORD, Buffer);
    654       1.1    jruoho     AsReplaceString ("return_ACPI_STATUS",  "return", REPLACE_WHOLE_WORD, Buffer);
    655       1.1    jruoho     AsReplaceString ("return_acpi_status",  "return", REPLACE_WHOLE_WORD, Buffer);
    656       1.1    jruoho     AsReplaceString ("return_VALUE",        "return", REPLACE_WHOLE_WORD, Buffer);
    657       1.1    jruoho }
    658       1.1    jruoho 
    659       1.1    jruoho 
    660   1.1.1.3  christos /******************************************************************************
    661   1.1.1.3  christos  *
    662   1.1.1.3  christos  * FUNCTION:    AsCleanupSpecialMacro
    663   1.1.1.3  christos  *
    664   1.1.1.3  christos  * DESCRIPTION: For special macro invocations (invoked without ";" at the end
    665   1.1.1.3  christos  *              of the lines), do the following:
    666   1.1.1.3  christos  *              1. Remove spaces appended by indent at the beginning of lines.
    667   1.1.1.3  christos  *              2. Add an empty line between two special macro invocations.
    668   1.1.1.3  christos  *
    669   1.1.1.3  christos  ******************************************************************************/
    670   1.1.1.3  christos 
    671   1.1.1.3  christos void
    672   1.1.1.3  christos AsCleanupSpecialMacro (
    673   1.1.1.3  christos     char                    *Buffer,
    674   1.1.1.3  christos     char                    *Keyword)
    675   1.1.1.3  christos {
    676   1.1.1.3  christos     char                    *SubString;
    677   1.1.1.3  christos     char                    *SubBuffer;
    678   1.1.1.3  christos     char                    *CommentEnd;
    679   1.1.1.3  christos     int                     NewLine;
    680   1.1.1.3  christos     int                     NestLevel;
    681   1.1.1.3  christos 
    682   1.1.1.3  christos 
    683   1.1.1.3  christos     SubBuffer = Buffer;
    684   1.1.1.3  christos     SubString = Buffer;
    685   1.1.1.3  christos 
    686   1.1.1.3  christos     while (SubString)
    687   1.1.1.3  christos     {
    688   1.1.1.3  christos         SubString = strstr (SubBuffer, Keyword);
    689   1.1.1.3  christos 
    690   1.1.1.3  christos         if (SubString)
    691   1.1.1.3  christos         {
    692   1.1.1.3  christos             /* Find start of the macro parameters */
    693   1.1.1.3  christos 
    694   1.1.1.3  christos             while (*SubString != '(')
    695   1.1.1.3  christos             {
    696   1.1.1.3  christos                 SubString++;
    697   1.1.1.3  christos             }
    698   1.1.1.7  christos 
    699   1.1.1.3  christos             SubString++;
    700   1.1.1.3  christos 
    701   1.1.1.3  christos             NestLevel = 1;
    702   1.1.1.3  christos             while (*SubString)
    703   1.1.1.3  christos             {
    704   1.1.1.3  christos                 if (*SubString == '(')
    705   1.1.1.3  christos                 {
    706   1.1.1.3  christos                     NestLevel++;
    707   1.1.1.3  christos                 }
    708   1.1.1.3  christos                 else if (*SubString == ')')
    709   1.1.1.3  christos                 {
    710   1.1.1.3  christos                     NestLevel--;
    711   1.1.1.3  christos                 }
    712   1.1.1.3  christos 
    713   1.1.1.3  christos                 SubString++;
    714   1.1.1.3  christos 
    715   1.1.1.3  christos                 if (NestLevel == 0)
    716   1.1.1.3  christos                 {
    717   1.1.1.3  christos                     break;
    718   1.1.1.3  christos                 }
    719   1.1.1.3  christos             }
    720   1.1.1.3  christos 
    721   1.1.1.3  christos SkipLine:
    722   1.1.1.3  christos 
    723   1.1.1.3  christos             /* Find end of the line */
    724   1.1.1.3  christos 
    725   1.1.1.3  christos             NewLine = FALSE;
    726   1.1.1.3  christos             while (!NewLine && *SubString)
    727   1.1.1.3  christos             {
    728   1.1.1.3  christos                 if (*SubString == '\n' && *(SubString - 1) != '\\')
    729   1.1.1.3  christos                 {
    730   1.1.1.3  christos                     NewLine = TRUE;
    731   1.1.1.3  christos                 }
    732   1.1.1.7  christos 
    733   1.1.1.3  christos                 SubString++;
    734   1.1.1.3  christos             }
    735   1.1.1.3  christos 
    736   1.1.1.3  christos             /* Find end of the line */
    737   1.1.1.3  christos 
    738   1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    739   1.1.1.3  christos             {
    740   1.1.1.3  christos                 goto SkipLine;
    741   1.1.1.3  christos             }
    742   1.1.1.3  christos 
    743   1.1.1.3  christos             SubBuffer = SubString;
    744   1.1.1.3  christos 
    745   1.1.1.3  christos             /* Find start of the non-space */
    746   1.1.1.3  christos 
    747   1.1.1.3  christos             while (*SubString == ' ')
    748   1.1.1.3  christos             {
    749   1.1.1.3  christos                 SubString++;
    750   1.1.1.3  christos             }
    751   1.1.1.3  christos 
    752   1.1.1.3  christos             /* Find end of the line */
    753   1.1.1.3  christos 
    754   1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    755   1.1.1.3  christos             {
    756   1.1.1.3  christos                 goto SkipLine;
    757   1.1.1.3  christos             }
    758   1.1.1.3  christos 
    759   1.1.1.3  christos             /* Find end of the line */
    760   1.1.1.3  christos 
    761   1.1.1.3  christos             if (*SubString == '/' || *SubString == '*')
    762   1.1.1.3  christos             {
    763   1.1.1.3  christos                 CommentEnd = strstr (SubString, "*/");
    764   1.1.1.3  christos                 if (CommentEnd)
    765   1.1.1.3  christos                 {
    766   1.1.1.3  christos                     SubString = CommentEnd + 2;
    767   1.1.1.3  christos                     goto SkipLine;
    768   1.1.1.3  christos                 }
    769   1.1.1.3  christos             }
    770   1.1.1.3  christos 
    771   1.1.1.3  christos             SubString = AsRemoveData (SubBuffer, SubString);
    772   1.1.1.3  christos         }
    773   1.1.1.3  christos     }
    774   1.1.1.3  christos }
    775