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