From fc9744098c869ab18a2d4f2eeff102b6ea72df87 Mon Sep 17 00:00:00 2001 From: Gregory Bean Date: Wed, 6 Jul 2011 15:36:58 -0700 Subject: [PATCH] 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 Signed-off-by: Rishabh Bhatnagar Signed-off-by: Raghavendra Rao Ananta --- scripts/checkpatch.pl | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 39aac0fb0b1a..e49e19f23c31 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -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;