Home | History | Annotate | Line # | Download | only in acpisrc
asremove.c revision 1.1.1.2.20.2
      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.20.2  jdolecek  * Copyright (C) 2000 - 2017, 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.20.1       tls  *              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.2.20.1       tls         if (Gbl_IgnoreTranslationEscapes)
    175  1.1.1.2.20.1       tls         {
    176  1.1.1.2.20.1       tls             Comment = NULL;
    177  1.1.1.2.20.1       tls         }
    178  1.1.1.2.20.1       tls         else
    179  1.1.1.2.20.1       tls         {
    180  1.1.1.2.20.1       tls             Comment = strstr (SubString, AS_START_IGNORE);
    181  1.1.1.2.20.1       tls         }
    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.2.20.2  jdolecek 
    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.2.20.2  jdolecek #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.2.20.1       tls  * 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.2.20.2  jdolecek NOTE: This function is no longer used and is commented out for now.
    312  1.1.1.2.20.2  jdolecek 
    313  1.1.1.2.20.2  jdolecek Also, it appears to have one or more bugs in it. It can incorrectly remove
    314  1.1.1.2.20.2  jdolecek lines of code, producing some garbage.
    315  1.1.1.2.20.2  jdolecek 
    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.2.20.2  jdolecek #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.2.20.1       tls  * 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.2.20.2  jdolecek     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.2.20.2  jdolecek             SubSubString = SubString + strlen (Keyword);
    459           1.1    jruoho 
    460  1.1.1.2.20.2  jdolecek             /* skip spaces */
    461  1.1.1.2.20.2  jdolecek 
    462  1.1.1.2.20.2  jdolecek             while (strchr(" \t\r\n", *SubSubString))
    463  1.1.1.2.20.2  jdolecek             {
    464  1.1.1.2.20.2  jdolecek                 SubSubString++;
    465  1.1.1.2.20.2  jdolecek             }
    466           1.1    jruoho 
    467  1.1.1.2.20.2  jdolecek             /* skip type name */
    468           1.1    jruoho 
    469  1.1.1.2.20.2  jdolecek             while (!strchr(" \t\r\n", *SubSubString))
    470           1.1    jruoho             {
    471  1.1.1.2.20.2  jdolecek                 SubSubString++;
    472           1.1    jruoho             }
    473           1.1    jruoho 
    474  1.1.1.2.20.2  jdolecek             /* skip spaces */
    475           1.1    jruoho 
    476  1.1.1.2.20.2  jdolecek             while (strchr(" \t\r\n", *SubSubString))
    477  1.1.1.2.20.2  jdolecek             {
    478  1.1.1.2.20.2  jdolecek                 SubSubString++;
    479  1.1.1.2.20.2  jdolecek             }
    480  1.1.1.2.20.2  jdolecek 
    481  1.1.1.2.20.2  jdolecek             if (*SubSubString == '{')
    482           1.1    jruoho             {
    483  1.1.1.2.20.2  jdolecek                 /* Remove the typedef itself */
    484  1.1.1.2.20.2  jdolecek 
    485  1.1.1.2.20.2  jdolecek                 SubBuffer = SubString + strlen ("typedef") + 1;
    486  1.1.1.2.20.2  jdolecek                 SubBuffer = AsRemoveData (SubString, SubBuffer);
    487  1.1.1.2.20.2  jdolecek 
    488  1.1.1.2.20.2  jdolecek                 /* Find the opening brace of the struct or union */
    489  1.1.1.2.20.2  jdolecek 
    490  1.1.1.2.20.2  jdolecek                 while (*SubString != '{')
    491           1.1    jruoho                 {
    492  1.1.1.2.20.2  jdolecek                     SubString++;
    493           1.1    jruoho                 }
    494  1.1.1.2.20.2  jdolecek                 SubString++;
    495  1.1.1.2.20.2  jdolecek 
    496  1.1.1.2.20.2  jdolecek                 /* Find the closing brace. Handles nested braces */
    497  1.1.1.2.20.2  jdolecek 
    498  1.1.1.2.20.2  jdolecek                 NestLevel = 1;
    499  1.1.1.2.20.2  jdolecek                 while (*SubString)
    500           1.1    jruoho                 {
    501  1.1.1.2.20.2  jdolecek                     if (*SubString == '{')
    502  1.1.1.2.20.2  jdolecek                     {
    503  1.1.1.2.20.2  jdolecek                         NestLevel++;
    504  1.1.1.2.20.2  jdolecek                     }
    505  1.1.1.2.20.2  jdolecek                     else if (*SubString == '}')
    506  1.1.1.2.20.2  jdolecek                     {
    507  1.1.1.2.20.2  jdolecek                         NestLevel--;
    508  1.1.1.2.20.2  jdolecek                     }
    509  1.1.1.2.20.2  jdolecek 
    510  1.1.1.2.20.2  jdolecek                     SubString++;
    511  1.1.1.2.20.2  jdolecek 
    512  1.1.1.2.20.2  jdolecek                     if (NestLevel == 0)
    513  1.1.1.2.20.2  jdolecek                     {
    514  1.1.1.2.20.2  jdolecek                         break;
    515  1.1.1.2.20.2  jdolecek                     }
    516           1.1    jruoho                 }
    517           1.1    jruoho 
    518  1.1.1.2.20.2  jdolecek                 /* Remove an extra line feed if present */
    519           1.1    jruoho 
    520  1.1.1.2.20.2  jdolecek                 if (!strncmp (SubString - 3, "\n\n", 2))
    521           1.1    jruoho                 {
    522  1.1.1.2.20.2  jdolecek                     *(SubString -2) = '}';
    523  1.1.1.2.20.2  jdolecek                     SubString--;
    524           1.1    jruoho                 }
    525           1.1    jruoho 
    526  1.1.1.2.20.2  jdolecek                 /* Find the end of the typedef name */
    527           1.1    jruoho 
    528  1.1.1.2.20.2  jdolecek                 SubBuffer = AsSkipUntilChar (SubString, ';');
    529           1.1    jruoho 
    530  1.1.1.2.20.2  jdolecek                 /* And remove the typedef name */
    531           1.1    jruoho 
    532  1.1.1.2.20.2  jdolecek                 SubBuffer = AsRemoveData (SubString, SubBuffer);
    533  1.1.1.2.20.2  jdolecek             }
    534  1.1.1.2.20.2  jdolecek             else
    535  1.1.1.2.20.2  jdolecek             {
    536  1.1.1.2.20.2  jdolecek                 /* Skip the entire definition */
    537           1.1    jruoho 
    538  1.1.1.2.20.2  jdolecek                 SubString = strchr (SubString, ';') + 1;
    539  1.1.1.2.20.2  jdolecek                 SubBuffer = SubString;
    540  1.1.1.2.20.2  jdolecek             }
    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.2.20.1       tls  * 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.2.20.2  jdolecek 
    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.2.20.2  jdolecek     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.2.20.1       tls /******************************************************************************
    662  1.1.1.2.20.1       tls  *
    663  1.1.1.2.20.1       tls  * FUNCTION:    AsCleanupSpecialMacro
    664  1.1.1.2.20.1       tls  *
    665  1.1.1.2.20.1       tls  * DESCRIPTION: For special macro invocations (invoked without ";" at the end
    666  1.1.1.2.20.1       tls  *              of the lines), do the following:
    667  1.1.1.2.20.1       tls  *              1. Remove spaces appended by indent at the beginning of lines.
    668  1.1.1.2.20.1       tls  *              2. Add an empty line between two special macro invocations.
    669  1.1.1.2.20.1       tls  *
    670  1.1.1.2.20.1       tls  ******************************************************************************/
    671  1.1.1.2.20.1       tls 
    672  1.1.1.2.20.1       tls void
    673  1.1.1.2.20.1       tls AsCleanupSpecialMacro (
    674  1.1.1.2.20.1       tls     char                    *Buffer,
    675  1.1.1.2.20.1       tls     char                    *Keyword)
    676  1.1.1.2.20.1       tls {
    677  1.1.1.2.20.1       tls     char                    *SubString;
    678  1.1.1.2.20.1       tls     char                    *SubBuffer;
    679  1.1.1.2.20.1       tls     char                    *CommentEnd;
    680  1.1.1.2.20.1       tls     int                     NewLine;
    681  1.1.1.2.20.1       tls     int                     NestLevel;
    682  1.1.1.2.20.1       tls 
    683  1.1.1.2.20.1       tls 
    684  1.1.1.2.20.1       tls     SubBuffer = Buffer;
    685  1.1.1.2.20.1       tls     SubString = Buffer;
    686  1.1.1.2.20.1       tls 
    687  1.1.1.2.20.1       tls     while (SubString)
    688  1.1.1.2.20.1       tls     {
    689  1.1.1.2.20.1       tls         SubString = strstr (SubBuffer, Keyword);
    690  1.1.1.2.20.1       tls 
    691  1.1.1.2.20.1       tls         if (SubString)
    692  1.1.1.2.20.1       tls         {
    693  1.1.1.2.20.1       tls             /* Find start of the macro parameters */
    694  1.1.1.2.20.1       tls 
    695  1.1.1.2.20.1       tls             while (*SubString != '(')
    696  1.1.1.2.20.1       tls             {
    697  1.1.1.2.20.1       tls                 SubString++;
    698  1.1.1.2.20.1       tls             }
    699  1.1.1.2.20.2  jdolecek 
    700  1.1.1.2.20.1       tls             SubString++;
    701  1.1.1.2.20.1       tls 
    702  1.1.1.2.20.1       tls             NestLevel = 1;
    703  1.1.1.2.20.1       tls             while (*SubString)
    704  1.1.1.2.20.1       tls             {
    705  1.1.1.2.20.1       tls                 if (*SubString == '(')
    706  1.1.1.2.20.1       tls                 {
    707  1.1.1.2.20.1       tls                     NestLevel++;
    708  1.1.1.2.20.1       tls                 }
    709  1.1.1.2.20.1       tls                 else if (*SubString == ')')
    710  1.1.1.2.20.1       tls                 {
    711  1.1.1.2.20.1       tls                     NestLevel--;
    712  1.1.1.2.20.1       tls                 }
    713  1.1.1.2.20.1       tls 
    714  1.1.1.2.20.1       tls                 SubString++;
    715  1.1.1.2.20.1       tls 
    716  1.1.1.2.20.1       tls                 if (NestLevel == 0)
    717  1.1.1.2.20.1       tls                 {
    718  1.1.1.2.20.1       tls                     break;
    719  1.1.1.2.20.1       tls                 }
    720  1.1.1.2.20.1       tls             }
    721  1.1.1.2.20.1       tls 
    722  1.1.1.2.20.1       tls SkipLine:
    723  1.1.1.2.20.1       tls 
    724  1.1.1.2.20.1       tls             /* Find end of the line */
    725  1.1.1.2.20.1       tls 
    726  1.1.1.2.20.1       tls             NewLine = FALSE;
    727  1.1.1.2.20.1       tls             while (!NewLine && *SubString)
    728  1.1.1.2.20.1       tls             {
    729  1.1.1.2.20.1       tls                 if (*SubString == '\n' && *(SubString - 1) != '\\')
    730  1.1.1.2.20.1       tls                 {
    731  1.1.1.2.20.1       tls                     NewLine = TRUE;
    732  1.1.1.2.20.1       tls                 }
    733  1.1.1.2.20.2  jdolecek 
    734  1.1.1.2.20.1       tls                 SubString++;
    735  1.1.1.2.20.1       tls             }
    736  1.1.1.2.20.1       tls 
    737  1.1.1.2.20.1       tls             /* Find end of the line */
    738  1.1.1.2.20.1       tls 
    739  1.1.1.2.20.1       tls             if (*SubString == '#' || *SubString == '\n')
    740  1.1.1.2.20.1       tls             {
    741  1.1.1.2.20.1       tls                 goto SkipLine;
    742  1.1.1.2.20.1       tls             }
    743  1.1.1.2.20.1       tls 
    744  1.1.1.2.20.1       tls             SubBuffer = SubString;
    745  1.1.1.2.20.1       tls 
    746  1.1.1.2.20.1       tls             /* Find start of the non-space */
    747  1.1.1.2.20.1       tls 
    748  1.1.1.2.20.1       tls             while (*SubString == ' ')
    749  1.1.1.2.20.1       tls             {
    750  1.1.1.2.20.1       tls                 SubString++;
    751  1.1.1.2.20.1       tls             }
    752  1.1.1.2.20.1       tls 
    753  1.1.1.2.20.1       tls             /* Find end of the line */
    754  1.1.1.2.20.1       tls 
    755  1.1.1.2.20.1       tls             if (*SubString == '#' || *SubString == '\n')
    756  1.1.1.2.20.1       tls             {
    757  1.1.1.2.20.1       tls                 goto SkipLine;
    758  1.1.1.2.20.1       tls             }
    759  1.1.1.2.20.1       tls 
    760  1.1.1.2.20.1       tls             /* Find end of the line */
    761  1.1.1.2.20.1       tls 
    762  1.1.1.2.20.1       tls             if (*SubString == '/' || *SubString == '*')
    763  1.1.1.2.20.1       tls             {
    764  1.1.1.2.20.1       tls                 CommentEnd = strstr (SubString, "*/");
    765  1.1.1.2.20.1       tls                 if (CommentEnd)
    766  1.1.1.2.20.1       tls                 {
    767  1.1.1.2.20.1       tls                     SubString = CommentEnd + 2;
    768  1.1.1.2.20.1       tls                     goto SkipLine;
    769  1.1.1.2.20.1       tls                 }
    770  1.1.1.2.20.1       tls             }
    771  1.1.1.2.20.1       tls 
    772  1.1.1.2.20.1       tls             SubString = AsRemoveData (SubBuffer, SubString);
    773  1.1.1.2.20.1       tls         }
    774  1.1.1.2.20.1       tls     }
    775  1.1.1.2.20.1       tls }
    776