Home | History | Annotate | Line # | Download | only in acpisrc
asremove.c revision 1.1.1.12
      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     SubBuffer = Buffer;
    160       1.1    jruoho     SubString = Buffer;
    161       1.1    jruoho 
    162       1.1    jruoho     while (SubString)
    163       1.1    jruoho     {
    164       1.1    jruoho         SubBuffer = strstr (SubString, Keyword);
    165       1.1    jruoho         if (!SubBuffer)
    166       1.1    jruoho         {
    167       1.1    jruoho             return;
    168       1.1    jruoho         }
    169       1.1    jruoho 
    170       1.1    jruoho         /*
    171       1.1    jruoho          * Check for translation escape string -- means to ignore
    172       1.1    jruoho          * blocks of code while replacing
    173       1.1    jruoho          */
    174   1.1.1.3  christos         if (Gbl_IgnoreTranslationEscapes)
    175   1.1.1.3  christos         {
    176   1.1.1.3  christos             Comment = NULL;
    177   1.1.1.3  christos         }
    178   1.1.1.3  christos         else
    179   1.1.1.3  christos         {
    180   1.1.1.3  christos             Comment = strstr (SubString, AS_START_IGNORE);
    181   1.1.1.3  christos         }
    182       1.1    jruoho 
    183       1.1    jruoho         if ((Comment) &&
    184       1.1    jruoho             (Comment < SubBuffer))
    185       1.1    jruoho         {
    186       1.1    jruoho             SubString = strstr (Comment, AS_STOP_IGNORE);
    187       1.1    jruoho             if (!SubString)
    188       1.1    jruoho             {
    189       1.1    jruoho                 return;
    190       1.1    jruoho             }
    191       1.1    jruoho 
    192       1.1    jruoho             SubString += 3;
    193       1.1    jruoho             continue;
    194       1.1    jruoho         }
    195       1.1    jruoho 
    196       1.1    jruoho         /* Check for ordinary comment */
    197       1.1    jruoho 
    198       1.1    jruoho         Comment = strstr (SubString, "/*");
    199       1.1    jruoho 
    200       1.1    jruoho         if ((Comment) &&
    201       1.1    jruoho             (Comment < SubBuffer))
    202       1.1    jruoho         {
    203       1.1    jruoho             SubString = strstr (Comment, "*/");
    204       1.1    jruoho             if (!SubString)
    205       1.1    jruoho             {
    206       1.1    jruoho                 return;
    207       1.1    jruoho             }
    208       1.1    jruoho 
    209       1.1    jruoho             SubString += 2;
    210       1.1    jruoho             continue;
    211       1.1    jruoho         }
    212       1.1    jruoho 
    213       1.1    jruoho         SubString = SubBuffer;
    214       1.1    jruoho         if (!AsMatchExactWord (SubString, KeywordLength))
    215       1.1    jruoho         {
    216       1.1    jruoho             SubString++;
    217       1.1    jruoho             continue;
    218       1.1    jruoho         }
    219       1.1    jruoho 
    220       1.1    jruoho         /* Find start of this line */
    221       1.1    jruoho 
    222       1.1    jruoho         while (*SubString != '\n' && (SubString > Buffer))
    223       1.1    jruoho         {
    224       1.1    jruoho             SubString--;
    225       1.1    jruoho         }
    226   1.1.1.7  christos 
    227       1.1    jruoho         SubString++;
    228       1.1    jruoho 
    229       1.1    jruoho         /* Find the "#ifxxxx" */
    230       1.1    jruoho 
    231       1.1    jruoho         IfPtr = strstr (SubString, "#if");
    232       1.1    jruoho         if (!IfPtr)
    233       1.1    jruoho         {
    234       1.1    jruoho             return;
    235       1.1    jruoho         }
    236       1.1    jruoho 
    237       1.1    jruoho         if (IfPtr > SubBuffer)
    238       1.1    jruoho         {
    239       1.1    jruoho             /* Not the right #if */
    240       1.1    jruoho 
    241       1.1    jruoho             SubString = SubBuffer + strlen (Keyword);
    242       1.1    jruoho             continue;
    243       1.1    jruoho         }
    244       1.1    jruoho 
    245       1.1    jruoho         /* Find closing #endif or #else */
    246       1.1    jruoho 
    247       1.1    jruoho         EndifPtr = strstr (SubBuffer, "#endif");
    248       1.1    jruoho         if (!EndifPtr)
    249       1.1    jruoho         {
    250       1.1    jruoho             /* There has to be an #endif */
    251       1.1    jruoho 
    252       1.1    jruoho             return;
    253       1.1    jruoho         }
    254       1.1    jruoho 
    255       1.1    jruoho         ElsePtr = strstr (SubBuffer, "#else");
    256       1.1    jruoho         if ((ElsePtr) &&
    257       1.1    jruoho             (EndifPtr > ElsePtr))
    258       1.1    jruoho         {
    259       1.1    jruoho             /* This #ifdef contains an #else clause */
    260       1.1    jruoho             /* Find end of this line */
    261       1.1    jruoho 
    262       1.1    jruoho             SubBuffer = AsSkipPastChar (ElsePtr, '\n');
    263       1.1    jruoho             if (!SubBuffer)
    264       1.1    jruoho             {
    265       1.1    jruoho                 return;
    266       1.1    jruoho             }
    267       1.1    jruoho 
    268       1.1    jruoho             /* Remove the #ifdef .... #else code */
    269       1.1    jruoho 
    270       1.1    jruoho             AsRemoveData (SubString, SubBuffer);
    271       1.1    jruoho 
    272       1.1    jruoho             /* Next, we will remove the #endif statement */
    273       1.1    jruoho 
    274       1.1    jruoho             EndifPtr = strstr (SubString, "#endif");
    275       1.1    jruoho             if (!EndifPtr)
    276       1.1    jruoho             {
    277       1.1    jruoho                 /* There has to be an #endif */
    278       1.1    jruoho 
    279       1.1    jruoho                 return;
    280       1.1    jruoho             }
    281       1.1    jruoho 
    282       1.1    jruoho             SubString = EndifPtr;
    283       1.1    jruoho         }
    284       1.1    jruoho 
    285       1.1    jruoho         /* Remove the ... #endif part */
    286       1.1    jruoho         /* Find end of this line */
    287       1.1    jruoho 
    288       1.1    jruoho         SubBuffer = AsSkipPastChar (EndifPtr, '\n');
    289       1.1    jruoho         if (!SubBuffer)
    290       1.1    jruoho         {
    291       1.1    jruoho             return;
    292       1.1    jruoho         }
    293       1.1    jruoho 
    294       1.1    jruoho         /* Remove the lines */
    295       1.1    jruoho 
    296       1.1    jruoho         SubBuffer = AsRemoveData (SubString, SubBuffer);
    297       1.1    jruoho     }
    298       1.1    jruoho }
    299       1.1    jruoho 
    300       1.1    jruoho 
    301   1.1.1.6  christos #ifdef _OBSOLETE_FUNCTIONS
    302       1.1    jruoho /******************************************************************************
    303       1.1    jruoho  *
    304       1.1    jruoho  * FUNCTION:    AsRemoveMacro
    305       1.1    jruoho  *
    306   1.1.1.3  christos  * DESCRIPTION: Remove every line that contains the keyword. Does not
    307       1.1    jruoho  *              skip comments.
    308       1.1    jruoho  *
    309       1.1    jruoho  ******************************************************************************/
    310       1.1    jruoho 
    311   1.1.1.6  christos NOTE: This function is no longer used and is commented out for now.
    312   1.1.1.6  christos 
    313   1.1.1.6  christos Also, it appears to have one or more bugs in it. It can incorrectly remove
    314   1.1.1.6  christos lines of code, producing some garbage.
    315   1.1.1.6  christos 
    316       1.1    jruoho void
    317       1.1    jruoho AsRemoveMacro (
    318       1.1    jruoho     char                    *Buffer,
    319       1.1    jruoho     char                    *Keyword)
    320       1.1    jruoho {
    321       1.1    jruoho     char                    *SubString;
    322       1.1    jruoho     char                    *SubBuffer;
    323       1.1    jruoho     int                     NestLevel;
    324       1.1    jruoho 
    325       1.1    jruoho 
    326       1.1    jruoho     SubBuffer = Buffer;
    327       1.1    jruoho     SubString = Buffer;
    328       1.1    jruoho 
    329       1.1    jruoho     while (SubString)
    330       1.1    jruoho     {
    331       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    332       1.1    jruoho 
    333       1.1    jruoho         if (SubString)
    334       1.1    jruoho         {
    335       1.1    jruoho             SubBuffer = SubString;
    336       1.1    jruoho 
    337       1.1    jruoho             /* Find start of the macro parameters */
    338       1.1    jruoho 
    339       1.1    jruoho             while (*SubString != '(')
    340       1.1    jruoho             {
    341       1.1    jruoho                 SubString++;
    342       1.1    jruoho             }
    343       1.1    jruoho             SubString++;
    344       1.1    jruoho 
    345       1.1    jruoho             /* Remove the macro name and opening paren */
    346       1.1    jruoho 
    347       1.1    jruoho             SubString = AsRemoveData (SubBuffer, SubString);
    348       1.1    jruoho 
    349       1.1    jruoho             NestLevel = 1;
    350       1.1    jruoho             while (*SubString)
    351       1.1    jruoho             {
    352       1.1    jruoho                 if (*SubString == '(')
    353       1.1    jruoho                 {
    354       1.1    jruoho                     NestLevel++;
    355       1.1    jruoho                 }
    356       1.1    jruoho                 else if (*SubString == ')')
    357       1.1    jruoho                 {
    358       1.1    jruoho                     NestLevel--;
    359       1.1    jruoho                 }
    360       1.1    jruoho 
    361       1.1    jruoho                 SubString++;
    362       1.1    jruoho 
    363       1.1    jruoho                 if (NestLevel == 0)
    364       1.1    jruoho                 {
    365       1.1    jruoho                     break;
    366       1.1    jruoho                 }
    367       1.1    jruoho             }
    368       1.1    jruoho 
    369       1.1    jruoho             /* Remove the closing paren */
    370       1.1    jruoho 
    371       1.1    jruoho             SubBuffer = AsRemoveData (SubString-1, SubString);
    372       1.1    jruoho         }
    373       1.1    jruoho     }
    374       1.1    jruoho }
    375   1.1.1.6  christos #endif
    376       1.1    jruoho 
    377       1.1    jruoho /******************************************************************************
    378       1.1    jruoho  *
    379       1.1    jruoho  * FUNCTION:    AsRemoveLine
    380       1.1    jruoho  *
    381   1.1.1.3  christos  * DESCRIPTION: Remove every line that contains the keyword. Does not
    382       1.1    jruoho  *              skip comments.
    383       1.1    jruoho  *
    384       1.1    jruoho  ******************************************************************************/
    385       1.1    jruoho 
    386       1.1    jruoho void
    387       1.1    jruoho AsRemoveLine (
    388       1.1    jruoho     char                    *Buffer,
    389       1.1    jruoho     char                    *Keyword)
    390       1.1    jruoho {
    391       1.1    jruoho     char                    *SubString;
    392       1.1    jruoho     char                    *SubBuffer;
    393       1.1    jruoho 
    394       1.1    jruoho 
    395       1.1    jruoho     SubBuffer = Buffer;
    396       1.1    jruoho     SubString = Buffer;
    397       1.1    jruoho 
    398       1.1    jruoho     while (SubString)
    399       1.1    jruoho     {
    400       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    401       1.1    jruoho 
    402       1.1    jruoho         if (SubString)
    403       1.1    jruoho         {
    404       1.1    jruoho             SubBuffer = SubString;
    405       1.1    jruoho 
    406       1.1    jruoho             /* Find start of this line */
    407       1.1    jruoho 
    408       1.1    jruoho             while (*SubString != '\n')
    409       1.1    jruoho             {
    410       1.1    jruoho                 SubString--;
    411       1.1    jruoho             }
    412       1.1    jruoho             SubString++;
    413       1.1    jruoho 
    414       1.1    jruoho             /* Find end of this line */
    415       1.1    jruoho 
    416       1.1    jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\n');
    417       1.1    jruoho             if (!SubBuffer)
    418       1.1    jruoho             {
    419       1.1    jruoho                 return;
    420       1.1    jruoho             }
    421       1.1    jruoho 
    422       1.1    jruoho             /* Remove the line */
    423       1.1    jruoho 
    424       1.1    jruoho             SubBuffer = AsRemoveData (SubString, SubBuffer);
    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  *
    432       1.1    jruoho  * FUNCTION:    AsReduceTypedefs
    433       1.1    jruoho  *
    434       1.1    jruoho  * DESCRIPTION: Eliminate certain typedefs
    435       1.1    jruoho  *
    436       1.1    jruoho  ******************************************************************************/
    437       1.1    jruoho 
    438       1.1    jruoho void
    439       1.1    jruoho AsReduceTypedefs (
    440       1.1    jruoho     char                    *Buffer,
    441       1.1    jruoho     char                    *Keyword)
    442       1.1    jruoho {
    443       1.1    jruoho     char                    *SubString;
    444       1.1    jruoho     char                    *SubBuffer;
    445  1.1.1.10  christos     char                    *SubSubString;
    446       1.1    jruoho     int                     NestLevel;
    447       1.1    jruoho 
    448       1.1    jruoho 
    449       1.1    jruoho     SubBuffer = Buffer;
    450       1.1    jruoho     SubString = Buffer;
    451       1.1    jruoho 
    452       1.1    jruoho     while (SubString)
    453       1.1    jruoho     {
    454       1.1    jruoho         SubString = strstr (SubBuffer, Keyword);
    455       1.1    jruoho 
    456       1.1    jruoho         if (SubString)
    457       1.1    jruoho         {
    458  1.1.1.10  christos             SubSubString = SubString + strlen (Keyword);
    459       1.1    jruoho 
    460  1.1.1.10  christos             /* skip spaces */
    461       1.1    jruoho 
    462  1.1.1.10  christos             while (strchr(" \t\r\n", *SubSubString))
    463  1.1.1.10  christos             {
    464  1.1.1.10  christos                 SubSubString++;
    465  1.1.1.10  christos             }
    466  1.1.1.10  christos 
    467  1.1.1.10  christos             /* skip type name */
    468       1.1    jruoho 
    469  1.1.1.10  christos             while (!strchr(" \t\r\n", *SubSubString))
    470       1.1    jruoho             {
    471  1.1.1.10  christos                 SubSubString++;
    472       1.1    jruoho             }
    473       1.1    jruoho 
    474  1.1.1.10  christos             /* skip spaces */
    475       1.1    jruoho 
    476  1.1.1.10  christos             while (strchr(" \t\r\n", *SubSubString))
    477  1.1.1.10  christos             {
    478  1.1.1.10  christos                 SubSubString++;
    479  1.1.1.10  christos             }
    480  1.1.1.10  christos 
    481  1.1.1.10  christos             if (*SubSubString == '{')
    482       1.1    jruoho             {
    483  1.1.1.10  christos                 /* Remove the typedef itself */
    484  1.1.1.10  christos 
    485  1.1.1.10  christos                 SubBuffer = SubString + strlen ("typedef") + 1;
    486  1.1.1.10  christos                 SubBuffer = AsRemoveData (SubString, SubBuffer);
    487  1.1.1.10  christos 
    488  1.1.1.10  christos                 /* Find the opening brace of the struct or union */
    489  1.1.1.10  christos 
    490  1.1.1.10  christos                 while (*SubString != '{')
    491       1.1    jruoho                 {
    492  1.1.1.10  christos                     SubString++;
    493       1.1    jruoho                 }
    494  1.1.1.10  christos                 SubString++;
    495  1.1.1.10  christos 
    496  1.1.1.10  christos                 /* Find the closing brace. Handles nested braces */
    497  1.1.1.10  christos 
    498  1.1.1.10  christos                 NestLevel = 1;
    499  1.1.1.10  christos                 while (*SubString)
    500       1.1    jruoho                 {
    501  1.1.1.10  christos                     if (*SubString == '{')
    502  1.1.1.10  christos                     {
    503  1.1.1.10  christos                         NestLevel++;
    504  1.1.1.10  christos                     }
    505  1.1.1.10  christos                     else if (*SubString == '}')
    506  1.1.1.10  christos                     {
    507  1.1.1.10  christos                         NestLevel--;
    508  1.1.1.10  christos                     }
    509  1.1.1.10  christos 
    510  1.1.1.10  christos                     SubString++;
    511  1.1.1.10  christos 
    512  1.1.1.10  christos                     if (NestLevel == 0)
    513  1.1.1.10  christos                     {
    514  1.1.1.10  christos                         break;
    515  1.1.1.10  christos                     }
    516       1.1    jruoho                 }
    517       1.1    jruoho 
    518  1.1.1.10  christos                 /* Remove an extra line feed if present */
    519       1.1    jruoho 
    520  1.1.1.10  christos                 if (!strncmp (SubString - 3, "\n\n", 2))
    521       1.1    jruoho                 {
    522  1.1.1.10  christos                     *(SubString -2) = '}';
    523  1.1.1.10  christos                     SubString--;
    524       1.1    jruoho                 }
    525       1.1    jruoho 
    526  1.1.1.10  christos                 /* Find the end of the typedef name */
    527       1.1    jruoho 
    528  1.1.1.10  christos                 SubBuffer = AsSkipUntilChar (SubString, ';');
    529       1.1    jruoho 
    530  1.1.1.10  christos                 /* And remove the typedef name */
    531       1.1    jruoho 
    532  1.1.1.10  christos                 SubBuffer = AsRemoveData (SubString, SubBuffer);
    533  1.1.1.10  christos             }
    534  1.1.1.10  christos             else
    535  1.1.1.10  christos             {
    536  1.1.1.10  christos                 /* Skip the entire definition */
    537       1.1    jruoho 
    538  1.1.1.10  christos                 SubString = strchr (SubString, ';') + 1;
    539  1.1.1.10  christos                 SubBuffer = SubString;
    540  1.1.1.10  christos             }
    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  *
    548       1.1    jruoho  * FUNCTION:    AsRemoveEmptyBlocks
    549       1.1    jruoho  *
    550   1.1.1.3  christos  * DESCRIPTION: Remove any C blocks (e.g., if {}) that contain no code. This
    551       1.1    jruoho  *              can happen as a result of removing lines such as DEBUG_PRINT.
    552       1.1    jruoho  *
    553       1.1    jruoho  ******************************************************************************/
    554       1.1    jruoho 
    555       1.1    jruoho void
    556       1.1    jruoho AsRemoveEmptyBlocks (
    557       1.1    jruoho     char                    *Buffer,
    558       1.1    jruoho     char                    *Filename)
    559       1.1    jruoho {
    560       1.1    jruoho     char                    *SubBuffer;
    561       1.1    jruoho     char                    *BlockStart;
    562       1.1    jruoho     BOOLEAN                 EmptyBlock = TRUE;
    563       1.1    jruoho     BOOLEAN                 AnotherPassRequired = TRUE;
    564       1.1    jruoho     UINT32                  BlockCount = 0;
    565       1.1    jruoho 
    566       1.1    jruoho 
    567       1.1    jruoho     while (AnotherPassRequired)
    568       1.1    jruoho     {
    569       1.1    jruoho         SubBuffer = Buffer;
    570       1.1    jruoho         AnotherPassRequired = FALSE;
    571       1.1    jruoho 
    572       1.1    jruoho         while (*SubBuffer)
    573       1.1    jruoho         {
    574       1.1    jruoho             if (*SubBuffer == '{')
    575       1.1    jruoho             {
    576       1.1    jruoho                 BlockStart = SubBuffer;
    577       1.1    jruoho                 EmptyBlock = TRUE;
    578       1.1    jruoho 
    579       1.1    jruoho                 SubBuffer++;
    580       1.1    jruoho                 while (*SubBuffer != '}')
    581       1.1    jruoho                 {
    582       1.1    jruoho                     if ((*SubBuffer != ' ') &&
    583       1.1    jruoho                         (*SubBuffer != '\n'))
    584       1.1    jruoho                     {
    585       1.1    jruoho                         EmptyBlock = FALSE;
    586       1.1    jruoho                         break;
    587       1.1    jruoho                     }
    588   1.1.1.7  christos 
    589       1.1    jruoho                     SubBuffer++;
    590       1.1    jruoho                 }
    591       1.1    jruoho 
    592       1.1    jruoho                 if (EmptyBlock)
    593       1.1    jruoho                 {
    594       1.1    jruoho                     /* Find start of the first line of the block */
    595       1.1    jruoho 
    596       1.1    jruoho                     while (*BlockStart != '\n')
    597       1.1    jruoho                     {
    598       1.1    jruoho                         BlockStart--;
    599       1.1    jruoho                     }
    600       1.1    jruoho 
    601       1.1    jruoho                     /* Find end of the last line of the block */
    602       1.1    jruoho 
    603       1.1    jruoho                     SubBuffer = AsSkipUntilChar (SubBuffer, '\n');
    604       1.1    jruoho                     if (!SubBuffer)
    605       1.1    jruoho                     {
    606       1.1    jruoho                         break;
    607       1.1    jruoho                     }
    608       1.1    jruoho 
    609       1.1    jruoho                     /* Remove the block */
    610       1.1    jruoho 
    611       1.1    jruoho                     SubBuffer = AsRemoveData (BlockStart, SubBuffer);
    612       1.1    jruoho                     BlockCount++;
    613       1.1    jruoho                     AnotherPassRequired = TRUE;
    614       1.1    jruoho                     continue;
    615       1.1    jruoho                 }
    616       1.1    jruoho             }
    617       1.1    jruoho 
    618       1.1    jruoho             SubBuffer++;
    619       1.1    jruoho         }
    620       1.1    jruoho     }
    621       1.1    jruoho 
    622       1.1    jruoho     if (BlockCount)
    623       1.1    jruoho     {
    624       1.1    jruoho         Gbl_MadeChanges = TRUE;
    625       1.1    jruoho         AsPrint ("Code blocks deleted", BlockCount, Filename);
    626       1.1    jruoho     }
    627       1.1    jruoho }
    628       1.1    jruoho 
    629       1.1    jruoho 
    630       1.1    jruoho /******************************************************************************
    631       1.1    jruoho  *
    632       1.1    jruoho  * FUNCTION:    AsRemoveDebugMacros
    633       1.1    jruoho  *
    634       1.1    jruoho  * DESCRIPTION: Remove all "Debug" macros -- macros that produce debug output.
    635       1.1    jruoho  *
    636       1.1    jruoho  ******************************************************************************/
    637       1.1    jruoho 
    638       1.1    jruoho void
    639       1.1    jruoho AsRemoveDebugMacros (
    640       1.1    jruoho     char                    *Buffer)
    641       1.1    jruoho {
    642       1.1    jruoho     AsRemoveConditionalCompile (Buffer, "ACPI_DEBUG_OUTPUT");
    643       1.1    jruoho 
    644       1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT",      REPLACE_WHOLE_WORD);
    645       1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT_RAW",  REPLACE_WHOLE_WORD);
    646       1.1    jruoho     AsRemoveStatement (Buffer, "DEBUG_EXEC",            REPLACE_WHOLE_WORD);
    647       1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_ENTRY",        REPLACE_WHOLE_WORD);
    648       1.1    jruoho     AsRemoveStatement (Buffer, "PROC_NAME",             REPLACE_WHOLE_WORD);
    649       1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_TRACE",        REPLACE_SUBSTRINGS);
    650       1.1    jruoho     AsRemoveStatement (Buffer, "DUMP_",                 REPLACE_SUBSTRINGS);
    651       1.1    jruoho 
    652       1.1    jruoho     AsReplaceString ("return_VOID",         "return", REPLACE_WHOLE_WORD, Buffer);
    653       1.1    jruoho     AsReplaceString ("return_PTR",          "return", REPLACE_WHOLE_WORD, Buffer);
    654   1.1.1.8  christos     AsReplaceString ("return_STR",          "return", REPLACE_WHOLE_WORD, Buffer);
    655       1.1    jruoho     AsReplaceString ("return_ACPI_STATUS",  "return", REPLACE_WHOLE_WORD, Buffer);
    656       1.1    jruoho     AsReplaceString ("return_acpi_status",  "return", REPLACE_WHOLE_WORD, Buffer);
    657       1.1    jruoho     AsReplaceString ("return_VALUE",        "return", REPLACE_WHOLE_WORD, Buffer);
    658       1.1    jruoho }
    659       1.1    jruoho 
    660       1.1    jruoho 
    661   1.1.1.3  christos /******************************************************************************
    662   1.1.1.3  christos  *
    663   1.1.1.3  christos  * FUNCTION:    AsCleanupSpecialMacro
    664   1.1.1.3  christos  *
    665   1.1.1.3  christos  * DESCRIPTION: For special macro invocations (invoked without ";" at the end
    666   1.1.1.3  christos  *              of the lines), do the following:
    667   1.1.1.3  christos  *              1. Remove spaces appended by indent at the beginning of lines.
    668   1.1.1.3  christos  *              2. Add an empty line between two special macro invocations.
    669   1.1.1.3  christos  *
    670   1.1.1.3  christos  ******************************************************************************/
    671   1.1.1.3  christos 
    672   1.1.1.3  christos void
    673   1.1.1.3  christos AsCleanupSpecialMacro (
    674   1.1.1.3  christos     char                    *Buffer,
    675   1.1.1.3  christos     char                    *Keyword)
    676   1.1.1.3  christos {
    677   1.1.1.3  christos     char                    *SubString;
    678   1.1.1.3  christos     char                    *SubBuffer;
    679   1.1.1.3  christos     char                    *CommentEnd;
    680   1.1.1.3  christos     int                     NewLine;
    681   1.1.1.3  christos     int                     NestLevel;
    682   1.1.1.3  christos 
    683   1.1.1.3  christos 
    684   1.1.1.3  christos     SubBuffer = Buffer;
    685   1.1.1.3  christos     SubString = Buffer;
    686   1.1.1.3  christos 
    687   1.1.1.3  christos     while (SubString)
    688   1.1.1.3  christos     {
    689   1.1.1.3  christos         SubString = strstr (SubBuffer, Keyword);
    690   1.1.1.3  christos 
    691   1.1.1.3  christos         if (SubString)
    692   1.1.1.3  christos         {
    693   1.1.1.3  christos             /* Find start of the macro parameters */
    694   1.1.1.3  christos 
    695   1.1.1.3  christos             while (*SubString != '(')
    696   1.1.1.3  christos             {
    697   1.1.1.3  christos                 SubString++;
    698   1.1.1.3  christos             }
    699   1.1.1.7  christos 
    700   1.1.1.3  christos             SubString++;
    701   1.1.1.3  christos 
    702   1.1.1.3  christos             NestLevel = 1;
    703   1.1.1.3  christos             while (*SubString)
    704   1.1.1.3  christos             {
    705   1.1.1.3  christos                 if (*SubString == '(')
    706   1.1.1.3  christos                 {
    707   1.1.1.3  christos                     NestLevel++;
    708   1.1.1.3  christos                 }
    709   1.1.1.3  christos                 else if (*SubString == ')')
    710   1.1.1.3  christos                 {
    711   1.1.1.3  christos                     NestLevel--;
    712   1.1.1.3  christos                 }
    713   1.1.1.3  christos 
    714   1.1.1.3  christos                 SubString++;
    715   1.1.1.3  christos 
    716   1.1.1.3  christos                 if (NestLevel == 0)
    717   1.1.1.3  christos                 {
    718   1.1.1.3  christos                     break;
    719   1.1.1.3  christos                 }
    720   1.1.1.3  christos             }
    721   1.1.1.3  christos 
    722   1.1.1.3  christos SkipLine:
    723   1.1.1.3  christos 
    724   1.1.1.3  christos             /* Find end of the line */
    725   1.1.1.3  christos 
    726   1.1.1.3  christos             NewLine = FALSE;
    727   1.1.1.3  christos             while (!NewLine && *SubString)
    728   1.1.1.3  christos             {
    729   1.1.1.3  christos                 if (*SubString == '\n' && *(SubString - 1) != '\\')
    730   1.1.1.3  christos                 {
    731   1.1.1.3  christos                     NewLine = TRUE;
    732   1.1.1.3  christos                 }
    733   1.1.1.7  christos 
    734   1.1.1.3  christos                 SubString++;
    735   1.1.1.3  christos             }
    736   1.1.1.3  christos 
    737   1.1.1.3  christos             /* Find end of the line */
    738   1.1.1.3  christos 
    739   1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    740   1.1.1.3  christos             {
    741   1.1.1.3  christos                 goto SkipLine;
    742   1.1.1.3  christos             }
    743   1.1.1.3  christos 
    744   1.1.1.3  christos             SubBuffer = SubString;
    745   1.1.1.3  christos 
    746   1.1.1.3  christos             /* Find start of the non-space */
    747   1.1.1.3  christos 
    748   1.1.1.3  christos             while (*SubString == ' ')
    749   1.1.1.3  christos             {
    750   1.1.1.3  christos                 SubString++;
    751   1.1.1.3  christos             }
    752   1.1.1.3  christos 
    753   1.1.1.3  christos             /* Find end of the line */
    754   1.1.1.3  christos 
    755   1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    756   1.1.1.3  christos             {
    757   1.1.1.3  christos                 goto SkipLine;
    758   1.1.1.3  christos             }
    759   1.1.1.3  christos 
    760   1.1.1.3  christos             /* Find end of the line */
    761   1.1.1.3  christos 
    762   1.1.1.3  christos             if (*SubString == '/' || *SubString == '*')
    763   1.1.1.3  christos             {
    764   1.1.1.3  christos                 CommentEnd = strstr (SubString, "*/");
    765   1.1.1.3  christos                 if (CommentEnd)
    766   1.1.1.3  christos                 {
    767   1.1.1.3  christos                     SubString = CommentEnd + 2;
    768   1.1.1.3  christos                     goto SkipLine;
    769   1.1.1.3  christos                 }
    770   1.1.1.3  christos             }
    771   1.1.1.3  christos 
    772   1.1.1.3  christos             SubString = AsRemoveData (SubBuffer, SubString);
    773   1.1.1.3  christos         }
    774   1.1.1.3  christos     }
    775   1.1.1.3  christos }
    776