Home | History | Annotate | Line # | Download | only in acpisrc
asremove.c revision 1.1.1.8
      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.7  christos  * Copyright (C) 2000 - 2016, 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    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    jruoho             /* Remove the typedef itself */
    458      1.1    jruoho 
    459      1.1    jruoho             SubBuffer = SubString + strlen ("typedef") + 1;
    460      1.1    jruoho             SubBuffer = AsRemoveData (SubString, SubBuffer);
    461      1.1    jruoho 
    462      1.1    jruoho             /* Find the opening brace of the struct or union */
    463      1.1    jruoho 
    464      1.1    jruoho             while (*SubString != '{')
    465      1.1    jruoho             {
    466      1.1    jruoho                 SubString++;
    467      1.1    jruoho             }
    468      1.1    jruoho             SubString++;
    469      1.1    jruoho 
    470  1.1.1.3  christos             /* Find the closing brace. Handles nested braces */
    471      1.1    jruoho 
    472      1.1    jruoho             NestLevel = 1;
    473      1.1    jruoho             while (*SubString)
    474      1.1    jruoho             {
    475      1.1    jruoho                 if (*SubString == '{')
    476      1.1    jruoho                 {
    477      1.1    jruoho                     NestLevel++;
    478      1.1    jruoho                 }
    479      1.1    jruoho                 else if (*SubString == '}')
    480      1.1    jruoho                 {
    481      1.1    jruoho                     NestLevel--;
    482      1.1    jruoho                 }
    483      1.1    jruoho 
    484      1.1    jruoho                 SubString++;
    485      1.1    jruoho 
    486      1.1    jruoho                 if (NestLevel == 0)
    487      1.1    jruoho                 {
    488      1.1    jruoho                     break;
    489      1.1    jruoho                 }
    490      1.1    jruoho             }
    491      1.1    jruoho 
    492      1.1    jruoho             /* Remove an extra line feed if present */
    493      1.1    jruoho 
    494      1.1    jruoho             if (!strncmp (SubString - 3, "\n\n", 2))
    495      1.1    jruoho             {
    496      1.1    jruoho                 *(SubString -2) = '}';
    497      1.1    jruoho                 SubString--;
    498      1.1    jruoho             }
    499      1.1    jruoho 
    500      1.1    jruoho             /* Find the end of the typedef name */
    501      1.1    jruoho 
    502      1.1    jruoho             SubBuffer = AsSkipUntilChar (SubString, ';');
    503      1.1    jruoho 
    504      1.1    jruoho             /* And remove the typedef name */
    505      1.1    jruoho 
    506      1.1    jruoho             SubBuffer = AsRemoveData (SubString, SubBuffer);
    507      1.1    jruoho         }
    508      1.1    jruoho     }
    509      1.1    jruoho }
    510      1.1    jruoho 
    511      1.1    jruoho 
    512      1.1    jruoho /******************************************************************************
    513      1.1    jruoho  *
    514      1.1    jruoho  * FUNCTION:    AsRemoveEmptyBlocks
    515      1.1    jruoho  *
    516  1.1.1.3  christos  * DESCRIPTION: Remove any C blocks (e.g., if {}) that contain no code. This
    517      1.1    jruoho  *              can happen as a result of removing lines such as DEBUG_PRINT.
    518      1.1    jruoho  *
    519      1.1    jruoho  ******************************************************************************/
    520      1.1    jruoho 
    521      1.1    jruoho void
    522      1.1    jruoho AsRemoveEmptyBlocks (
    523      1.1    jruoho     char                    *Buffer,
    524      1.1    jruoho     char                    *Filename)
    525      1.1    jruoho {
    526      1.1    jruoho     char                    *SubBuffer;
    527      1.1    jruoho     char                    *BlockStart;
    528      1.1    jruoho     BOOLEAN                 EmptyBlock = TRUE;
    529      1.1    jruoho     BOOLEAN                 AnotherPassRequired = TRUE;
    530      1.1    jruoho     UINT32                  BlockCount = 0;
    531      1.1    jruoho 
    532      1.1    jruoho 
    533      1.1    jruoho     while (AnotherPassRequired)
    534      1.1    jruoho     {
    535      1.1    jruoho         SubBuffer = Buffer;
    536      1.1    jruoho         AnotherPassRequired = FALSE;
    537      1.1    jruoho 
    538      1.1    jruoho         while (*SubBuffer)
    539      1.1    jruoho         {
    540      1.1    jruoho             if (*SubBuffer == '{')
    541      1.1    jruoho             {
    542      1.1    jruoho                 BlockStart = SubBuffer;
    543      1.1    jruoho                 EmptyBlock = TRUE;
    544      1.1    jruoho 
    545      1.1    jruoho                 SubBuffer++;
    546      1.1    jruoho                 while (*SubBuffer != '}')
    547      1.1    jruoho                 {
    548      1.1    jruoho                     if ((*SubBuffer != ' ') &&
    549      1.1    jruoho                         (*SubBuffer != '\n'))
    550      1.1    jruoho                     {
    551      1.1    jruoho                         EmptyBlock = FALSE;
    552      1.1    jruoho                         break;
    553      1.1    jruoho                     }
    554  1.1.1.7  christos 
    555      1.1    jruoho                     SubBuffer++;
    556      1.1    jruoho                 }
    557      1.1    jruoho 
    558      1.1    jruoho                 if (EmptyBlock)
    559      1.1    jruoho                 {
    560      1.1    jruoho                     /* Find start of the first line of the block */
    561      1.1    jruoho 
    562      1.1    jruoho                     while (*BlockStart != '\n')
    563      1.1    jruoho                     {
    564      1.1    jruoho                         BlockStart--;
    565      1.1    jruoho                     }
    566      1.1    jruoho 
    567      1.1    jruoho                     /* Find end of the last line of the block */
    568      1.1    jruoho 
    569      1.1    jruoho                     SubBuffer = AsSkipUntilChar (SubBuffer, '\n');
    570      1.1    jruoho                     if (!SubBuffer)
    571      1.1    jruoho                     {
    572      1.1    jruoho                         break;
    573      1.1    jruoho                     }
    574      1.1    jruoho 
    575      1.1    jruoho                     /* Remove the block */
    576      1.1    jruoho 
    577      1.1    jruoho                     SubBuffer = AsRemoveData (BlockStart, SubBuffer);
    578      1.1    jruoho                     BlockCount++;
    579      1.1    jruoho                     AnotherPassRequired = TRUE;
    580      1.1    jruoho                     continue;
    581      1.1    jruoho                 }
    582      1.1    jruoho             }
    583      1.1    jruoho 
    584      1.1    jruoho             SubBuffer++;
    585      1.1    jruoho         }
    586      1.1    jruoho     }
    587      1.1    jruoho 
    588      1.1    jruoho     if (BlockCount)
    589      1.1    jruoho     {
    590      1.1    jruoho         Gbl_MadeChanges = TRUE;
    591      1.1    jruoho         AsPrint ("Code blocks deleted", BlockCount, Filename);
    592      1.1    jruoho     }
    593      1.1    jruoho }
    594      1.1    jruoho 
    595      1.1    jruoho 
    596      1.1    jruoho /******************************************************************************
    597      1.1    jruoho  *
    598      1.1    jruoho  * FUNCTION:    AsRemoveDebugMacros
    599      1.1    jruoho  *
    600      1.1    jruoho  * DESCRIPTION: Remove all "Debug" macros -- macros that produce debug output.
    601      1.1    jruoho  *
    602      1.1    jruoho  ******************************************************************************/
    603      1.1    jruoho 
    604      1.1    jruoho void
    605      1.1    jruoho AsRemoveDebugMacros (
    606      1.1    jruoho     char                    *Buffer)
    607      1.1    jruoho {
    608      1.1    jruoho     AsRemoveConditionalCompile (Buffer, "ACPI_DEBUG_OUTPUT");
    609      1.1    jruoho 
    610      1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT",      REPLACE_WHOLE_WORD);
    611      1.1    jruoho     AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT_RAW",  REPLACE_WHOLE_WORD);
    612      1.1    jruoho     AsRemoveStatement (Buffer, "DEBUG_EXEC",            REPLACE_WHOLE_WORD);
    613      1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_ENTRY",        REPLACE_WHOLE_WORD);
    614      1.1    jruoho     AsRemoveStatement (Buffer, "PROC_NAME",             REPLACE_WHOLE_WORD);
    615      1.1    jruoho     AsRemoveStatement (Buffer, "FUNCTION_TRACE",        REPLACE_SUBSTRINGS);
    616      1.1    jruoho     AsRemoveStatement (Buffer, "DUMP_",                 REPLACE_SUBSTRINGS);
    617      1.1    jruoho 
    618      1.1    jruoho     AsReplaceString ("return_VOID",         "return", REPLACE_WHOLE_WORD, Buffer);
    619      1.1    jruoho     AsReplaceString ("return_PTR",          "return", REPLACE_WHOLE_WORD, Buffer);
    620  1.1.1.8  christos     AsReplaceString ("return_STR",          "return", REPLACE_WHOLE_WORD, Buffer);
    621      1.1    jruoho     AsReplaceString ("return_ACPI_STATUS",  "return", REPLACE_WHOLE_WORD, Buffer);
    622      1.1    jruoho     AsReplaceString ("return_acpi_status",  "return", REPLACE_WHOLE_WORD, Buffer);
    623      1.1    jruoho     AsReplaceString ("return_VALUE",        "return", REPLACE_WHOLE_WORD, Buffer);
    624      1.1    jruoho }
    625      1.1    jruoho 
    626      1.1    jruoho 
    627  1.1.1.3  christos /******************************************************************************
    628  1.1.1.3  christos  *
    629  1.1.1.3  christos  * FUNCTION:    AsCleanupSpecialMacro
    630  1.1.1.3  christos  *
    631  1.1.1.3  christos  * DESCRIPTION: For special macro invocations (invoked without ";" at the end
    632  1.1.1.3  christos  *              of the lines), do the following:
    633  1.1.1.3  christos  *              1. Remove spaces appended by indent at the beginning of lines.
    634  1.1.1.3  christos  *              2. Add an empty line between two special macro invocations.
    635  1.1.1.3  christos  *
    636  1.1.1.3  christos  ******************************************************************************/
    637  1.1.1.3  christos 
    638  1.1.1.3  christos void
    639  1.1.1.3  christos AsCleanupSpecialMacro (
    640  1.1.1.3  christos     char                    *Buffer,
    641  1.1.1.3  christos     char                    *Keyword)
    642  1.1.1.3  christos {
    643  1.1.1.3  christos     char                    *SubString;
    644  1.1.1.3  christos     char                    *SubBuffer;
    645  1.1.1.3  christos     char                    *CommentEnd;
    646  1.1.1.3  christos     int                     NewLine;
    647  1.1.1.3  christos     int                     NestLevel;
    648  1.1.1.3  christos 
    649  1.1.1.3  christos 
    650  1.1.1.3  christos     SubBuffer = Buffer;
    651  1.1.1.3  christos     SubString = Buffer;
    652  1.1.1.3  christos 
    653  1.1.1.3  christos     while (SubString)
    654  1.1.1.3  christos     {
    655  1.1.1.3  christos         SubString = strstr (SubBuffer, Keyword);
    656  1.1.1.3  christos 
    657  1.1.1.3  christos         if (SubString)
    658  1.1.1.3  christos         {
    659  1.1.1.3  christos             /* Find start of the macro parameters */
    660  1.1.1.3  christos 
    661  1.1.1.3  christos             while (*SubString != '(')
    662  1.1.1.3  christos             {
    663  1.1.1.3  christos                 SubString++;
    664  1.1.1.3  christos             }
    665  1.1.1.7  christos 
    666  1.1.1.3  christos             SubString++;
    667  1.1.1.3  christos 
    668  1.1.1.3  christos             NestLevel = 1;
    669  1.1.1.3  christos             while (*SubString)
    670  1.1.1.3  christos             {
    671  1.1.1.3  christos                 if (*SubString == '(')
    672  1.1.1.3  christos                 {
    673  1.1.1.3  christos                     NestLevel++;
    674  1.1.1.3  christos                 }
    675  1.1.1.3  christos                 else if (*SubString == ')')
    676  1.1.1.3  christos                 {
    677  1.1.1.3  christos                     NestLevel--;
    678  1.1.1.3  christos                 }
    679  1.1.1.3  christos 
    680  1.1.1.3  christos                 SubString++;
    681  1.1.1.3  christos 
    682  1.1.1.3  christos                 if (NestLevel == 0)
    683  1.1.1.3  christos                 {
    684  1.1.1.3  christos                     break;
    685  1.1.1.3  christos                 }
    686  1.1.1.3  christos             }
    687  1.1.1.3  christos 
    688  1.1.1.3  christos SkipLine:
    689  1.1.1.3  christos 
    690  1.1.1.3  christos             /* Find end of the line */
    691  1.1.1.3  christos 
    692  1.1.1.3  christos             NewLine = FALSE;
    693  1.1.1.3  christos             while (!NewLine && *SubString)
    694  1.1.1.3  christos             {
    695  1.1.1.3  christos                 if (*SubString == '\n' && *(SubString - 1) != '\\')
    696  1.1.1.3  christos                 {
    697  1.1.1.3  christos                     NewLine = TRUE;
    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 
    703  1.1.1.3  christos             /* Find end of the line */
    704  1.1.1.3  christos 
    705  1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    706  1.1.1.3  christos             {
    707  1.1.1.3  christos                 goto SkipLine;
    708  1.1.1.3  christos             }
    709  1.1.1.3  christos 
    710  1.1.1.3  christos             SubBuffer = SubString;
    711  1.1.1.3  christos 
    712  1.1.1.3  christos             /* Find start of the non-space */
    713  1.1.1.3  christos 
    714  1.1.1.3  christos             while (*SubString == ' ')
    715  1.1.1.3  christos             {
    716  1.1.1.3  christos                 SubString++;
    717  1.1.1.3  christos             }
    718  1.1.1.3  christos 
    719  1.1.1.3  christos             /* Find end of the line */
    720  1.1.1.3  christos 
    721  1.1.1.3  christos             if (*SubString == '#' || *SubString == '\n')
    722  1.1.1.3  christos             {
    723  1.1.1.3  christos                 goto SkipLine;
    724  1.1.1.3  christos             }
    725  1.1.1.3  christos 
    726  1.1.1.3  christos             /* Find end of the line */
    727  1.1.1.3  christos 
    728  1.1.1.3  christos             if (*SubString == '/' || *SubString == '*')
    729  1.1.1.3  christos             {
    730  1.1.1.3  christos                 CommentEnd = strstr (SubString, "*/");
    731  1.1.1.3  christos                 if (CommentEnd)
    732  1.1.1.3  christos                 {
    733  1.1.1.3  christos                     SubString = CommentEnd + 2;
    734  1.1.1.3  christos                     goto SkipLine;
    735  1.1.1.3  christos                 }
    736  1.1.1.3  christos             }
    737  1.1.1.3  christos 
    738  1.1.1.3  christos             SubString = AsRemoveData (SubBuffer, SubString);
    739  1.1.1.3  christos         }
    740  1.1.1.3  christos     }
    741  1.1.1.3  christos }
    742