Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc974409 authored by Gregory Bean's avatar Gregory Bean Committed by Raghavendra Rao Ananta
Browse files

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: default avatarGregory Bean <gbean@codeaurora.org>
Signed-off-by: default avatarRishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: default avatarRaghavendra Rao Ananta <rananta@codeaurora.org>
parent ba1e88bf
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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;