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