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

Commit a3bb97a7 authored by Andy Whitcroft's avatar Andy Whitcroft Committed by Linus Torvalds
Browse files

checkpatch: macros: fix statement counting block end detection



We are incorrectly counting the lines in a block while accumulating
the trailing lines in a macro statement, leading to false positives.
Fix end of block handling and general counting for negative context lines.

Signed-off-by: default avatarAndy Whitcroft <apw@shadowen.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 6ef9b297
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -470,7 +470,9 @@ sub ctx_statement_block {
		}
		$off++;
	}
	# We are truly at the end, so shuffle to the next line.
	if ($off == $len) {
		$loff = $len + 1;
		$line++;
		$remain--;
	}
@@ -1793,30 +1795,26 @@ sub process {
				$lines[$ln - 1] =~ /^(?:-|..*\\$)/)
			{
				$ctx .= $rawlines[$ln - 1] . "\n";
				$cnt-- if ($lines[$ln - 1] !~ /^-/);
				$ln++;
				$cnt--;
			}
			$ctx .= $rawlines[$ln - 1];

			($dstat, $dcond, $ln, $cnt, $off) =
				ctx_statement_block($linenr, $ln - $linenr + 1, 0);
			#print "dstat<$dstat> dcond<$dcond> cnt<$cnt> off<$off>\n";
			#print "LINE<$lines[$ln]> len<" . length($lines[$ln]) . "\n";
			#print "LINE<$lines[$ln-1]> len<" . length($lines[$ln-1]) . "\n";

			# Extract the remainder of the define (if any) and
			# rip off surrounding spaces, and trailing \'s.
			$rest = '';
			if (defined $lines[$ln - 1] &&
			    $off > length($lines[$ln - 1]))
			{
				$ln++;
			while ($off != 0 || ($cnt > 0 && $rest =~ /(?:^|\\)\s*$/)) {
				#print "ADDING $off <" . substr($lines[$ln - 1], $off) . ">\n";
				if ($off != 0 || $lines[$ln - 1] !~ /^-/) {
					$rest .= substr($lines[$ln - 1], $off) . "\n";
					$cnt--;
				$off = 0;
				}
			while ($cnt > 0) {
				$rest .= substr($lines[$ln - 1], $off) . "\n";
				$ln++;
				$cnt--;
				$off = 0;
			}
			$rest =~ s/\\\n.//g;
@@ -1847,6 +1845,7 @@ sub process {
				DEFINE_PER_CPU|
				__typeof__\(
			}x;
			#print "REST<$rest>\n";
			if ($rest ne '') {
				if ($rest !~ /while\s*\(/ &&
				    $dstat !~ /$exceptions/)