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