checkpatch: Handle continuation headers

Continuation headers baffle checkpatch, as it can only operate
on one line of context at a time.  When continuation headers are found,
put them up with the header they're continuing so the whole thing
can be parsed in a single line of context.

Change-Id: I2d22ed056f8203ae6dae473b01ae66bc1963ae75
Signed-off-by: Gregory Bean <gbean@codeaurora.org>
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
This commit is contained in:
Gregory Bean 2011-07-06 15:36:58 -07:00 committed by Raghavendra Rao Ananta
parent ba1e88bf38
commit fc9744098c

View File

@ -2243,6 +2243,33 @@ sub tabify {
return "$leading";
}
sub cleanup_continuation_headers {
# Collapse any header-continuation lines into a single line so they
# can be parsed meaningfully, as the parser only has one line
# of context to work with.
my $again;
do {
$again = 0;
foreach my $n (0 .. scalar(@rawlines) - 2) {
if ($rawlines[$n]=~/^\s*$/) {
# A blank line means there's no more chance
# of finding headers. Shortcut to done.
return;
}
if ($rawlines[$n]=~/^[\x21-\x39\x3b-\x7e]+:/ &&
$rawlines[$n+1]=~/^\s+/) {
# Continuation header. Collapse it.
my $line = splice @rawlines, $n+1, 1;
$line=~s/^\s+/ /;
$rawlines[$n] .= $line;
# We've 'destabilized' the list, so restart.
$again = 1;
last;
}
}
} while ($again);
}
sub pos_last_openparen {
my ($line) = @_;
@ -2349,7 +2376,9 @@ sub process {
my $checklicenseline = 1;
sanitise_line_reset();
cleanup_continuation_headers();
my $line;
foreach my $rawline (@rawlines) {
$linenr++;
$line = $rawline;