void AsReplaceHeader ( char *Buffer, char *NewHeader) { char *SubBuffer; char *TokenEnd; /* Find the original header */ SubBuffer = strstr (Buffer, HeaderBegin); if (!SubBuffer) { return; } /* Find the end of the original header */ TokenEnd = strstr (SubBuffer, "*/"); TokenEnd = AsSkipPastChar (TokenEnd, '\n'); /* Delete old header, insert new one */ AsReplaceData (SubBuffer, TokenEnd - SubBuffer, NewHeader, strlen (NewHeader)); }
void AsRemoveSpacesAfterPeriod ( char *FileBuffer, char *Filename) { int ReplaceCount = 0; char *Possible; Possible = FileBuffer; while (Possible) { Possible = strstr (Possible, ". "); if (Possible) { if ((*(Possible -1) == '.') || (*(Possible -1) == '\"') || (*(Possible -1) == '\n')) { Possible += 3; continue; } Possible = AsReplaceData (Possible, 3, ". ", 2); ReplaceCount++; } } if (ReplaceCount) { printf ("Removed %d extra blanks after a period: %s\n", ReplaceCount, Filename); } }
void AsConvertToLineFeeds ( char *Buffer) { char *SubString; char *SubBuffer; SubBuffer = Buffer; SubString = Buffer; while (SubString) { /* Find the target string */ SubString = strstr (SubBuffer, "\r\n"); if (!SubString) { return; } SubBuffer = AsReplaceData (SubString, 1, NULL, 0); } return; }
void AsTrimWhitespace ( char *Buffer) { char *SubBuffer; int ReplaceCount = 1; while (ReplaceCount) { ReplaceCount = AsReplaceString ("\n\n\n\n", "\n\n\n", REPLACE_SUBSTRINGS, Buffer); } /* * Check for exactly one blank line after the copyright header */ /* Find the header */ SubBuffer = strstr (Buffer, HeaderBegin); if (!SubBuffer) { return; } /* Find the end of the header */ SubBuffer = strstr (SubBuffer, "*/"); SubBuffer = AsSkipPastChar (SubBuffer, '\n'); /* Replace a double blank line with a single */ if (!strncmp (SubBuffer, "\n\n", 2)) { AsReplaceData (SubBuffer, 2, "\n", 1); AcpiOsPrintf ("Found multiple blank lines after copyright\n"); } /* If no blank line after header, insert one */ else if (*SubBuffer != '\n') { AsInsertData (SubBuffer, "\n", 1); AcpiOsPrintf ("Inserted blank line after copyright\n"); } }
void AsBracesOnSameLine ( char *Buffer) { char *SubBuffer = Buffer; char *Beginning; char *StartOfThisLine; char *Next; BOOLEAN BlockBegin = TRUE; while (*SubBuffer) { /* Ignore comments */ if ((SubBuffer[0] == '/') && (SubBuffer[1] == '*')) { SubBuffer = strstr (SubBuffer, "*/"); if (!SubBuffer) { return; } SubBuffer += 2; continue; } /* Ignore quoted strings */ if (*SubBuffer == '\"') { SubBuffer++; SubBuffer = AsSkipPastChar (SubBuffer, '\"'); if (!SubBuffer) { return; } } if (!strncmp ("\n}", SubBuffer, 2)) { /* * A newline followed by a closing brace closes a function * or struct or initializer block */ BlockBegin = TRUE; } /* * Move every standalone brace up to the previous line * Check for digit will ignore initializer lists surrounded by braces. * This will work until we we need more complex detection. */ if ((*SubBuffer == '{') && !isdigit ((int) SubBuffer[1])) { if (BlockBegin) { BlockBegin = FALSE; } else { /* * Backup to previous non-whitespace */ Beginning = SubBuffer - 1; while ((*Beginning == ' ') || (*Beginning == '\n')) { Beginning--; } StartOfThisLine = Beginning; while (*StartOfThisLine != '\n') { StartOfThisLine--; } /* * Move the brace up to the previous line, UNLESS: * * 1) There is a conditional compile on the line (starts with '#') * 2) Previous line ends with an '=' (Start of initializer block) * 3) Previous line ends with a comma (part of an init list) * 4) Previous line ends with a backslash (part of a macro) */ if ((StartOfThisLine[1] != '#') && (*Beginning != '\\') && (*Beginning != '/') && (*Beginning != '{') && (*Beginning != '=') && (*Beginning != ',')) { Beginning++; SubBuffer++; Gbl_MadeChanges = TRUE; #ifdef ADD_EXTRA_WHITESPACE AsReplaceData (Beginning, SubBuffer - Beginning, " {\n", 3); #else /* Find non-whitespace start of next line */ Next = SubBuffer + 1; while ((*Next == ' ') || (*Next == '\t')) { Next++; } /* Find non-whitespace start of this line */ StartOfThisLine++; while ((*StartOfThisLine == ' ') || (*StartOfThisLine == '\t')) { StartOfThisLine++; } /* * Must be a single-line comment to need more whitespace * Even then, we don't need more if the previous statement * is an "else". */ if ((Next[0] == '/') && (Next[1] == '*') && (Next[2] != '\n') && (!strncmp (StartOfThisLine, "else if", 7) || !strncmp (StartOfThisLine, "else while", 10) || strncmp (StartOfThisLine, "else", 4))) { AsReplaceData (Beginning, SubBuffer - Beginning, " {\n", 3); } else { AsReplaceData (Beginning, SubBuffer - Beginning, " {", 2); } #endif } } } SubBuffer++; } }
int AsReplaceString ( char *Target, char *Replacement, UINT8 Type, char *Buffer) { char *SubString1; char *SubString2; char *SubBuffer; int TargetLength; int ReplacementLength; int ReplaceCount = 0; TargetLength = strlen (Target); ReplacementLength = strlen (Replacement); SubBuffer = Buffer; SubString1 = Buffer; while (SubString1) { /* Find the target string */ SubString1 = strstr (SubBuffer, Target); if (!SubString1) { return (ReplaceCount); } /* * Check for translation escape string -- means to ignore * blocks of code while replacing */ if (Gbl_IgnoreTranslationEscapes) { SubString2 = NULL; } else { SubString2 = strstr (SubBuffer, AS_START_IGNORE); } if ((SubString2) && (SubString2 < SubString1)) { /* Find end of the escape block starting at "Substring2" */ SubString2 = strstr (SubString2, AS_STOP_IGNORE); if (!SubString2) { /* Didn't find terminator */ return (ReplaceCount); } /* Move buffer to end of escape block and continue */ SubBuffer = SubString2; } /* Do the actual replace if the target was found */ else { if ((Type & REPLACE_MASK) == REPLACE_WHOLE_WORD) { if (!AsMatchExactWord (SubString1, TargetLength)) { SubBuffer = SubString1 + 1; continue; } } SubBuffer = AsReplaceData (SubString1, TargetLength, Replacement, ReplacementLength); if ((Type & EXTRA_INDENT_C) && (!Gbl_StructDefs)) { SubBuffer = AsInsertData (SubBuffer, " ", 8); } ReplaceCount++; } } return (ReplaceCount); }