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)); }
static char * AsCheckAndSkipLiterals ( char *Buffer, UINT32 *TotalLines) { UINT32 NewLines = 0; char *SubBuffer = Buffer; char *LiteralEnd; /* Ignore comments */ if ((SubBuffer[0] == '/') && (SubBuffer[1] == '*')) { LiteralEnd = strstr (SubBuffer, "*/"); SubBuffer += 2; /* Get past comment opening */ if (!LiteralEnd) { return (SubBuffer); } while (SubBuffer < LiteralEnd) { if (*SubBuffer == '\n') { NewLines++; } SubBuffer++; } SubBuffer += 2; /* Get past comment close */ } /* Ignore quoted strings */ else if (*SubBuffer == '\"') { SubBuffer++; LiteralEnd = AsSkipPastChar (SubBuffer, '\"'); if (!LiteralEnd) { return (SubBuffer); } } if (TotalLines) { (*TotalLines) += NewLines; } return (SubBuffer); }
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 AsRemoveLine ( char *Buffer, char *Keyword) { char *SubString; char *SubBuffer; SubBuffer = Buffer; SubString = Buffer; while (SubString) { SubString = strstr (SubBuffer, Keyword); if (SubString) { SubBuffer = SubString; /* Find start of this line */ while (*SubString != '\n') { SubString--; } SubString++; /* Find end of this line */ SubBuffer = AsSkipPastChar (SubBuffer, '\n'); if (!SubBuffer) { return; } /* Remove the line */ SubBuffer = AsRemoveData (SubString, SubBuffer); } } }
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++; } }
void AsTabify8 ( char *Buffer) { char *SubBuffer = Buffer; char *NewSubBuffer; char *CommentEnd = NULL; UINT32 SpaceCount = 0; UINT32 Column = 0; UINT32 TabCount = 0; UINT32 LastLineTabCount = 0; UINT32 LastLineColumnStart = 0; UINT32 ThisColumnStart = 0; UINT32 ThisTabCount = 0; char *FirstNonBlank = NULL; while (*SubBuffer) { if (*SubBuffer == '\n') { /* This is a standalone blank line */ FirstNonBlank = NULL; Column = 0; SpaceCount = 0; TabCount = 0; SubBuffer++; continue; } if (!FirstNonBlank) { /* Find the first non-blank character on this line */ FirstNonBlank = SubBuffer; while (*FirstNonBlank == ' ') { FirstNonBlank++; } /* * This mechanism limits the difference in tab counts from * line to line. It helps avoid the situation where a second * continuation line (which was indented correctly for tabs=4) would * get indented off the screen if we just blindly converted to tabs. */ ThisColumnStart = FirstNonBlank - SubBuffer; if (LastLineTabCount == 0) { ThisTabCount = 0; } else if (ThisColumnStart == LastLineColumnStart) { ThisTabCount = LastLineTabCount -1; } else { ThisTabCount = LastLineTabCount + 1; } } Column++; /* Check if we are in a comment */ if ((SubBuffer[0] == '*') && (SubBuffer[1] == '/')) { SpaceCount = 0; SubBuffer += 2; if (*SubBuffer == '\n') { if (TabCount > 0) { LastLineTabCount = TabCount; TabCount = 0; } FirstNonBlank = NULL; LastLineColumnStart = ThisColumnStart; SubBuffer++; } continue; } /* Check for comment open */ if ((SubBuffer[0] == '/') && (SubBuffer[1] == '*')) { /* Find the end of the comment, it must exist */ CommentEnd = strstr (SubBuffer, "*/"); if (!CommentEnd) { return; } /* Toss the rest of this line or single-line comment */ while ((SubBuffer < CommentEnd) && (*SubBuffer != '\n')) { SubBuffer++; } if (*SubBuffer == '\n') { if (TabCount > 0) { LastLineTabCount = TabCount; TabCount = 0; } FirstNonBlank = NULL; LastLineColumnStart = ThisColumnStart; } SpaceCount = 0; continue; } /* Ignore quoted strings */ if ((!CommentEnd) && (*SubBuffer == '\"')) { SubBuffer++; SubBuffer = AsSkipPastChar (SubBuffer, '\"'); if (!SubBuffer) { return; } SpaceCount = 0; } if (*SubBuffer != ' ') { /* Not a space, skip to end of line */ SubBuffer = AsSkipUntilChar (SubBuffer, '\n'); if (!SubBuffer) { return; } if (TabCount > 0) { LastLineTabCount = TabCount; TabCount = 0; } FirstNonBlank = NULL; LastLineColumnStart = ThisColumnStart; Column = 0; SpaceCount = 0; } else { /* Another space */ SpaceCount++; if (SpaceCount >= 4) { /* Replace this group of spaces with a tab character */ SpaceCount = 0; NewSubBuffer = SubBuffer - 3; if (TabCount <= ThisTabCount ? (ThisTabCount +1) : 0) { *NewSubBuffer = '\t'; NewSubBuffer++; SubBuffer++; TabCount++; } /* Remove the spaces */ SubBuffer = AsRemoveData (NewSubBuffer, SubBuffer); continue; } } SubBuffer++; } }
void AsTabify4 ( char *Buffer) { char *SubBuffer = Buffer; char *NewSubBuffer; UINT32 SpaceCount = 0; UINT32 Column = 0; while (*SubBuffer) { if (*SubBuffer == '\n') { Column = 0; } else { Column++; } /* 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; } SpaceCount = 0; } if (*SubBuffer == ' ') { SpaceCount++; if (SpaceCount >= 4) { SpaceCount = 0; NewSubBuffer = (SubBuffer + 1) - 4; *NewSubBuffer = '\t'; NewSubBuffer++; /* Remove the spaces */ SubBuffer = AsRemoveData (NewSubBuffer, SubBuffer + 1); } if ((Column % 4) == 0) { SpaceCount = 0; } } else { SpaceCount = 0; } SubBuffer++; } }
void AsRemoveConditionalCompile ( char *Buffer, char *Keyword) { char *SubString; char *SubBuffer; char *IfPtr; char *EndifPtr; char *ElsePtr; char *Comment; int KeywordLength; KeywordLength = strlen (Keyword); SubBuffer = Buffer; SubString = Buffer; while (SubString) { SubBuffer = strstr (SubString, Keyword); if (!SubBuffer) { return; } /* * Check for translation escape string -- means to ignore * blocks of code while replacing */ Comment = strstr (SubString, AS_START_IGNORE); if ((Comment) && (Comment < SubBuffer)) { SubString = strstr (Comment, AS_STOP_IGNORE); if (!SubString) { return; } SubString += 3; continue; } /* Check for ordinary comment */ Comment = strstr (SubString, "/*"); if ((Comment) && (Comment < SubBuffer)) { SubString = strstr (Comment, "*/"); if (!SubString) { return; } SubString += 2; continue; } SubString = SubBuffer; if (!AsMatchExactWord (SubString, KeywordLength)) { SubString++; continue; } /* Find start of this line */ while (*SubString != '\n' && (SubString > Buffer)) { SubString--; } SubString++; /* Find the "#ifxxxx" */ IfPtr = strstr (SubString, "#if"); if (!IfPtr) { return; } if (IfPtr > SubBuffer) { /* Not the right #if */ SubString = SubBuffer + strlen (Keyword); continue; } /* Find closing #endif or #else */ EndifPtr = strstr (SubBuffer, "#endif"); if (!EndifPtr) { /* There has to be an #endif */ return; } ElsePtr = strstr (SubBuffer, "#else"); if ((ElsePtr) && (EndifPtr > ElsePtr)) { /* This #ifdef contains an #else clause */ /* Find end of this line */ SubBuffer = AsSkipPastChar (ElsePtr, '\n'); if (!SubBuffer) { return; } /* Remove the #ifdef .... #else code */ AsRemoveData (SubString, SubBuffer); /* Next, we will remove the #endif statement */ EndifPtr = strstr (SubString, "#endif"); if (!EndifPtr) { /* There has to be an #endif */ return; } SubString = EndifPtr; } /* Remove the ... #endif part */ /* Find end of this line */ SubBuffer = AsSkipPastChar (EndifPtr, '\n'); if (!SubBuffer) { return; } /* Remove the lines */ SubBuffer = AsRemoveData (SubString, SubBuffer); } }
void AsRemoveStatement ( char *Buffer, char *Keyword, UINT32 Type) { char *SubString; char *SubBuffer; int KeywordLength; KeywordLength = strlen (Keyword); SubBuffer = Buffer; SubString = Buffer; while (SubString) { SubString = strstr (SubBuffer, Keyword); if (SubString) { SubBuffer = SubString; if ((Type == REPLACE_WHOLE_WORD) && (!AsMatchExactWord (SubString, KeywordLength))) { SubBuffer++; continue; } /* Find start of this line */ while (*SubString != '\n') { SubString--; } SubString++; /* Find end of this statement */ SubBuffer = AsSkipPastChar (SubBuffer, ';'); if (!SubBuffer) { return; } /* Find end of this line */ SubBuffer = AsSkipPastChar (SubBuffer, '\n'); if (!SubBuffer) { return; } /* If next line is blank, remove it too */ if (*SubBuffer == '\n') { SubBuffer++; } /* Remove the lines */ SubBuffer = AsRemoveData (SubString, SubBuffer); } } }