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