aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 00:14:42 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 00:14:42 -0400
commit33caee39925b887a99a2400dc5c980097c3573f9 (patch)
tree8e68ad97e1fee88c4a3f31453041f8d139f2027e /scripts
parent6456a0438b984186a0c9c8ecc9fe3d97b7ac3613 (diff)
parentf84223087402c45179be5e7060c5736c17a7b271 (diff)
Merge branch 'akpm' (patchbomb from Andrew Morton)
Merge incoming from Andrew Morton: - Various misc things. - arch/sh updates. - Part of ocfs2. Review is slow. - Slab updates. - Most of -mm. - printk updates. - lib/ updates. - checkpatch updates. * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (226 commits) checkpatch: update $declaration_macros, add uninitialized_var checkpatch: warn on missing spaces in broken up quoted checkpatch: fix false positives for --strict "space after cast" test checkpatch: fix false positive MISSING_BREAK warnings with --file checkpatch: add test for native c90 types in unusual order checkpatch: add signed generic types checkpatch: add short int to c variable types checkpatch: add for_each tests to indentation and brace tests checkpatch: fix brace style misuses of else and while checkpatch: add --fix option for a couple OPEN_BRACE misuses checkpatch: use the correct indentation for which() checkpatch: add fix_insert_line and fix_delete_line helpers checkpatch: add ability to insert and delete lines to patch/file checkpatch: add an index variable for fixed lines checkpatch: warn on break after goto or return with same tab indentation checkpatch: emit a warning on file add/move/delete checkpatch: add test for commit id formatting style in commit log checkpatch: emit fewer kmalloc_array/kcalloc conversion warnings checkpatch: improve "no space after cast" test checkpatch: allow multiple const * types ...
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/checkpatch.pl581
1 files changed, 470 insertions, 111 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 182be0f12407..31a731e06f50 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -309,9 +309,12 @@ our $Operators = qr{
309our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; 309our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x;
310 310
311our $NonptrType; 311our $NonptrType;
312our $NonptrTypeMisordered;
312our $NonptrTypeWithAttr; 313our $NonptrTypeWithAttr;
313our $Type; 314our $Type;
315our $TypeMisordered;
314our $Declare; 316our $Declare;
317our $DeclareMisordered;
315 318
316our $NON_ASCII_UTF8 = qr{ 319our $NON_ASCII_UTF8 = qr{
317 [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte 320 [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
@@ -353,16 +356,36 @@ our $signature_tags = qr{(?xi:
353 Cc: 356 Cc:
354)}; 357)};
355 358
359our @typeListMisordered = (
360 qr{char\s+(?:un)?signed},
361 qr{int\s+(?:(?:un)?signed\s+)?short\s},
362 qr{int\s+short(?:\s+(?:un)?signed)},
363 qr{short\s+int(?:\s+(?:un)?signed)},
364 qr{(?:un)?signed\s+int\s+short},
365 qr{short\s+(?:un)?signed},
366 qr{long\s+int\s+(?:un)?signed},
367 qr{int\s+long\s+(?:un)?signed},
368 qr{long\s+(?:un)?signed\s+int},
369 qr{int\s+(?:un)?signed\s+long},
370 qr{int\s+(?:un)?signed},
371 qr{int\s+long\s+long\s+(?:un)?signed},
372 qr{long\s+long\s+int\s+(?:un)?signed},
373 qr{long\s+long\s+(?:un)?signed\s+int},
374 qr{long\s+long\s+(?:un)?signed},
375 qr{long\s+(?:un)?signed},
376);
377
356our @typeList = ( 378our @typeList = (
357 qr{void}, 379 qr{void},
358 qr{(?:unsigned\s+)?char}, 380 qr{(?:(?:un)?signed\s+)?char},
359 qr{(?:unsigned\s+)?short}, 381 qr{(?:(?:un)?signed\s+)?short\s+int},
360 qr{(?:unsigned\s+)?int}, 382 qr{(?:(?:un)?signed\s+)?short},
361 qr{(?:unsigned\s+)?long}, 383 qr{(?:(?:un)?signed\s+)?int},
362 qr{(?:unsigned\s+)?long\s+int}, 384 qr{(?:(?:un)?signed\s+)?long\s+int},
363 qr{(?:unsigned\s+)?long\s+long}, 385 qr{(?:(?:un)?signed\s+)?long\s+long\s+int},
364 qr{(?:unsigned\s+)?long\s+long\s+int}, 386 qr{(?:(?:un)?signed\s+)?long\s+long},
365 qr{unsigned}, 387 qr{(?:(?:un)?signed\s+)?long},
388 qr{(?:un)?signed},
366 qr{float}, 389 qr{float},
367 qr{double}, 390 qr{double},
368 qr{bool}, 391 qr{bool},
@@ -372,6 +395,7 @@ our @typeList = (
372 qr{${Ident}_t}, 395 qr{${Ident}_t},
373 qr{${Ident}_handler}, 396 qr{${Ident}_handler},
374 qr{${Ident}_handler_fn}, 397 qr{${Ident}_handler_fn},
398 @typeListMisordered,
375); 399);
376our @typeListWithAttr = ( 400our @typeListWithAttr = (
377 @typeList, 401 @typeList,
@@ -399,11 +423,6 @@ foreach my $entry (@mode_permission_funcs) {
399 $mode_perms_search .= $entry->[0]; 423 $mode_perms_search .= $entry->[0];
400} 424}
401 425
402our $declaration_macros = qr{(?x:
403 (?:$Storage\s+)?(?:DECLARE|DEFINE)_[A-Z]+\s*\(|
404 (?:$Storage\s+)?LIST_HEAD\s*\(
405)};
406
407our $allowed_asm_includes = qr{(?x: 426our $allowed_asm_includes = qr{(?x:
408 irq| 427 irq|
409 memory 428 memory
@@ -413,6 +432,7 @@ our $allowed_asm_includes = qr{(?x:
413sub build_types { 432sub build_types {
414 my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)"; 433 my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)";
415 my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)"; 434 my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)";
435 my $Misordered = "(?x: \n" . join("|\n ", @typeListMisordered) . "\n)";
416 my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)"; 436 my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)";
417 $Modifier = qr{(?:$Attribute|$Sparse|$mods)}; 437 $Modifier = qr{(?:$Attribute|$Sparse|$mods)};
418 $NonptrType = qr{ 438 $NonptrType = qr{
@@ -424,6 +444,13 @@ sub build_types {
424 ) 444 )
425 (?:\s+$Modifier|\s+const)* 445 (?:\s+$Modifier|\s+const)*
426 }x; 446 }x;
447 $NonptrTypeMisordered = qr{
448 (?:$Modifier\s+|const\s+)*
449 (?:
450 (?:${Misordered}\b)
451 )
452 (?:\s+$Modifier|\s+const)*
453 }x;
427 $NonptrTypeWithAttr = qr{ 454 $NonptrTypeWithAttr = qr{
428 (?:$Modifier\s+|const\s+)* 455 (?:$Modifier\s+|const\s+)*
429 (?: 456 (?:
@@ -435,10 +462,16 @@ sub build_types {
435 }x; 462 }x;
436 $Type = qr{ 463 $Type = qr{
437 $NonptrType 464 $NonptrType
438 (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*|\[\])+|(?:\s*\[\s*\])+)? 465 (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
466 (?:\s+$Inline|\s+$Modifier)*
467 }x;
468 $TypeMisordered = qr{
469 $NonptrTypeMisordered
470 (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
439 (?:\s+$Inline|\s+$Modifier)* 471 (?:\s+$Inline|\s+$Modifier)*
440 }x; 472 }x;
441 $Declare = qr{(?:$Storage\s+(?:$Inline\s+)?)?$Type}; 473 $Declare = qr{(?:$Storage\s+(?:$Inline\s+)?)?$Type};
474 $DeclareMisordered = qr{(?:$Storage\s+(?:$Inline\s+)?)?$TypeMisordered};
442} 475}
443build_types(); 476build_types();
444 477
@@ -452,6 +485,12 @@ our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/;
452our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*}; 485our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*};
453our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)}; 486our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)};
454 487
488our $declaration_macros = qr{(?x:
489 (?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,2}\s*\(|
490 (?:$Storage\s+)?LIST_HEAD\s*\(|
491 (?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(
492)};
493
455sub deparenthesize { 494sub deparenthesize {
456 my ($string) = @_; 495 my ($string) = @_;
457 return "" if (!defined($string)); 496 return "" if (!defined($string));
@@ -550,11 +589,43 @@ sub seed_camelcase_includes {
550 } 589 }
551} 590}
552 591
592sub git_commit_info {
593 my ($commit, $id, $desc) = @_;
594
595 return ($id, $desc) if ((which("git") eq "") || !(-e ".git"));
596
597 my $output = `git log --no-color --format='%H %s' -1 $commit 2>&1`;
598 $output =~ s/^\s*//gm;
599 my @lines = split("\n", $output);
600
601 if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) {
602# Maybe one day convert this block of bash into something that returns
603# all matching commit ids, but it's very slow...
604#
605# echo "checking commits $1..."
606# git rev-list --remotes | grep -i "^$1" |
607# while read line ; do
608# git log --format='%H %s' -1 $line |
609# echo "commit $(cut -c 1-12,41-)"
610# done
611 } elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
612 } else {
613 $id = substr($lines[0], 0, 12);
614 $desc = substr($lines[0], 41);
615 }
616
617 return ($id, $desc);
618}
619
553$chk_signoff = 0 if ($file); 620$chk_signoff = 0 if ($file);
554 621
555my @rawlines = (); 622my @rawlines = ();
556my @lines = (); 623my @lines = ();
557my @fixed = (); 624my @fixed = ();
625my @fixed_inserted = ();
626my @fixed_deleted = ();
627my $fixlinenr = -1;
628
558my $vname; 629my $vname;
559for my $filename (@ARGV) { 630for my $filename (@ARGV) {
560 my $FILE; 631 my $FILE;
@@ -583,6 +654,9 @@ for my $filename (@ARGV) {
583 @rawlines = (); 654 @rawlines = ();
584 @lines = (); 655 @lines = ();
585 @fixed = (); 656 @fixed = ();
657 @fixed_inserted = ();
658 @fixed_deleted = ();
659 $fixlinenr = -1;
586} 660}
587 661
588exit($exit); 662exit($exit);
@@ -674,6 +748,18 @@ sub format_email {
674 return $formatted_email; 748 return $formatted_email;
675} 749}
676 750
751sub which {
752 my ($bin) = @_;
753
754 foreach my $path (split(/:/, $ENV{PATH})) {
755 if (-e "$path/$bin") {
756 return "$path/$bin";
757 }
758 }
759
760 return "";
761}
762
677sub which_conf { 763sub which_conf {
678 my ($conf) = @_; 764 my ($conf) = @_;
679 765
@@ -1483,6 +1569,90 @@ sub report_dump {
1483 our @report; 1569 our @report;
1484} 1570}
1485 1571
1572sub fixup_current_range {
1573 my ($lineRef, $offset, $length) = @_;
1574
1575 if ($$lineRef =~ /^\@\@ -\d+,\d+ \+(\d+),(\d+) \@\@/) {
1576 my $o = $1;
1577 my $l = $2;
1578 my $no = $o + $offset;
1579 my $nl = $l + $length;
1580 $$lineRef =~ s/\+$o,$l \@\@/\+$no,$nl \@\@/;
1581 }
1582}
1583
1584sub fix_inserted_deleted_lines {
1585 my ($linesRef, $insertedRef, $deletedRef) = @_;
1586
1587 my $range_last_linenr = 0;
1588 my $delta_offset = 0;
1589
1590 my $old_linenr = 0;
1591 my $new_linenr = 0;
1592
1593 my $next_insert = 0;
1594 my $next_delete = 0;
1595
1596 my @lines = ();
1597
1598 my $inserted = @{$insertedRef}[$next_insert++];
1599 my $deleted = @{$deletedRef}[$next_delete++];
1600
1601 foreach my $old_line (@{$linesRef}) {
1602 my $save_line = 1;
1603 my $line = $old_line; #don't modify the array
1604 if ($line =~ /^(?:\+\+\+\|\-\-\-)\s+\S+/) { #new filename
1605 $delta_offset = 0;
1606 } elsif ($line =~ /^\@\@ -\d+,\d+ \+\d+,\d+ \@\@/) { #new hunk
1607 $range_last_linenr = $new_linenr;
1608 fixup_current_range(\$line, $delta_offset, 0);
1609 }
1610
1611 while (defined($deleted) && ${$deleted}{'LINENR'} == $old_linenr) {
1612 $deleted = @{$deletedRef}[$next_delete++];
1613 $save_line = 0;
1614 fixup_current_range(\$lines[$range_last_linenr], $delta_offset--, -1);
1615 }
1616
1617 while (defined($inserted) && ${$inserted}{'LINENR'} == $old_linenr) {
1618 push(@lines, ${$inserted}{'LINE'});
1619 $inserted = @{$insertedRef}[$next_insert++];
1620 $new_linenr++;
1621 fixup_current_range(\$lines[$range_last_linenr], $delta_offset++, 1);
1622 }
1623
1624 if ($save_line) {
1625 push(@lines, $line);
1626 $new_linenr++;
1627 }
1628
1629 $old_linenr++;
1630 }
1631
1632 return @lines;
1633}
1634
1635sub fix_insert_line {
1636 my ($linenr, $line) = @_;
1637
1638 my $inserted = {
1639 LINENR => $linenr,
1640 LINE => $line,
1641 };
1642 push(@fixed_inserted, $inserted);
1643}
1644
1645sub fix_delete_line {
1646 my ($linenr, $line) = @_;
1647
1648 my $deleted = {
1649 LINENR => $linenr,
1650 LINE => $line,
1651 };
1652
1653 push(@fixed_deleted, $deleted);
1654}
1655
1486sub ERROR { 1656sub ERROR {
1487 my ($type, $msg) = @_; 1657 my ($type, $msg) = @_;
1488 1658
@@ -1637,11 +1807,13 @@ sub process {
1637 my $signoff = 0; 1807 my $signoff = 0;
1638 my $is_patch = 0; 1808 my $is_patch = 0;
1639 1809
1640 my $in_header_lines = 1; 1810 my $in_header_lines = $file ? 0 : 1;
1641 my $in_commit_log = 0; #Scanning lines before patch 1811 my $in_commit_log = 0; #Scanning lines before patch
1642 1812 my $reported_maintainer_file = 0;
1643 my $non_utf8_charset = 0; 1813 my $non_utf8_charset = 0;
1644 1814
1815 my $last_blank_line = 0;
1816
1645 our @report = (); 1817 our @report = ();
1646 our $cnt_lines = 0; 1818 our $cnt_lines = 0;
1647 our $cnt_error = 0; 1819 our $cnt_error = 0;
@@ -1759,8 +1931,10 @@ sub process {
1759 1931
1760 $realcnt = 0; 1932 $realcnt = 0;
1761 $linenr = 0; 1933 $linenr = 0;
1934 $fixlinenr = -1;
1762 foreach my $line (@lines) { 1935 foreach my $line (@lines) {
1763 $linenr++; 1936 $linenr++;
1937 $fixlinenr++;
1764 my $sline = $line; #copy of $line 1938 my $sline = $line; #copy of $line
1765 $sline =~ s/$;/ /g; #with comments as spaces 1939 $sline =~ s/$;/ /g; #with comments as spaces
1766 1940
@@ -1891,7 +2065,7 @@ sub process {
1891 if (WARN("BAD_SIGN_OFF", 2065 if (WARN("BAD_SIGN_OFF",
1892 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr) && 2066 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr) &&
1893 $fix) { 2067 $fix) {
1894 $fixed[$linenr - 1] = 2068 $fixed[$fixlinenr] =
1895 "$ucfirst_sign_off $email"; 2069 "$ucfirst_sign_off $email";
1896 } 2070 }
1897 } 2071 }
@@ -1899,7 +2073,7 @@ sub process {
1899 if (WARN("BAD_SIGN_OFF", 2073 if (WARN("BAD_SIGN_OFF",
1900 "'$ucfirst_sign_off' is the preferred signature form\n" . $herecurr) && 2074 "'$ucfirst_sign_off' is the preferred signature form\n" . $herecurr) &&
1901 $fix) { 2075 $fix) {
1902 $fixed[$linenr - 1] = 2076 $fixed[$fixlinenr] =
1903 "$ucfirst_sign_off $email"; 2077 "$ucfirst_sign_off $email";
1904 } 2078 }
1905 2079
@@ -1908,7 +2082,7 @@ sub process {
1908 if (WARN("BAD_SIGN_OFF", 2082 if (WARN("BAD_SIGN_OFF",
1909 "Use a single space after $ucfirst_sign_off\n" . $herecurr) && 2083 "Use a single space after $ucfirst_sign_off\n" . $herecurr) &&
1910 $fix) { 2084 $fix) {
1911 $fixed[$linenr - 1] = 2085 $fixed[$fixlinenr] =
1912 "$ucfirst_sign_off $email"; 2086 "$ucfirst_sign_off $email";
1913 } 2087 }
1914 } 2088 }
@@ -1956,6 +2130,31 @@ sub process {
1956 "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); 2130 "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr);
1957 } 2131 }
1958 2132
2133# Check for improperly formed commit descriptions
2134 if ($in_commit_log &&
2135 $line =~ /\bcommit\s+[0-9a-f]{5,}/i &&
2136 $line !~ /\b[Cc]ommit [0-9a-f]{12,16} \("/) {
2137 $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i;
2138 my $init_char = $1;
2139 my $orig_commit = lc($2);
2140 my $id = '01234567890ab';
2141 my $desc = 'commit description';
2142 ($id, $desc) = git_commit_info($orig_commit, $id, $desc);
2143 ERROR("GIT_COMMIT_ID",
2144 "Please use 12 to 16 chars for the git commit ID like: '${init_char}ommit $id (\"$desc\")'\n" . $herecurr);
2145 }
2146
2147# Check for added, moved or deleted files
2148 if (!$reported_maintainer_file && !$in_commit_log &&
2149 ($line =~ /^(?:new|deleted) file mode\s*\d+\s*$/ ||
2150 $line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
2151 ($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
2152 (defined($1) || defined($2))))) {
2153 $reported_maintainer_file = 1;
2154 WARN("FILE_PATH_CHANGES",
2155 "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
2156 }
2157
1959# Check for wrappage within a valid hunk of the file 2158# Check for wrappage within a valid hunk of the file
1960 if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) { 2159 if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
1961 ERROR("CORRUPTED_PATCH", 2160 ERROR("CORRUPTED_PATCH",
@@ -1993,7 +2192,8 @@ sub process {
1993# Check if it's the start of a commit log 2192# Check if it's the start of a commit log
1994# (not a header line and we haven't seen the patch filename) 2193# (not a header line and we haven't seen the patch filename)
1995 if ($in_header_lines && $realfile =~ /^$/ && 2194 if ($in_header_lines && $realfile =~ /^$/ &&
1996 $rawline !~ /^(commit\b|from\b|[\w-]+:).+$/i) { 2195 !($rawline =~ /^\s+\S/ ||
2196 $rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
1997 $in_header_lines = 0; 2197 $in_header_lines = 0;
1998 $in_commit_log = 1; 2198 $in_commit_log = 1;
1999 } 2199 }
@@ -2021,14 +2221,14 @@ sub process {
2021 if (ERROR("DOS_LINE_ENDINGS", 2221 if (ERROR("DOS_LINE_ENDINGS",
2022 "DOS line endings\n" . $herevet) && 2222 "DOS line endings\n" . $herevet) &&
2023 $fix) { 2223 $fix) {
2024 $fixed[$linenr - 1] =~ s/[\s\015]+$//; 2224 $fixed[$fixlinenr] =~ s/[\s\015]+$//;
2025 } 2225 }
2026 } elsif ($rawline =~ /^\+.*\S\s+$/ || $rawline =~ /^\+\s+$/) { 2226 } elsif ($rawline =~ /^\+.*\S\s+$/ || $rawline =~ /^\+\s+$/) {
2027 my $herevet = "$here\n" . cat_vet($rawline) . "\n"; 2227 my $herevet = "$here\n" . cat_vet($rawline) . "\n";
2028 if (ERROR("TRAILING_WHITESPACE", 2228 if (ERROR("TRAILING_WHITESPACE",
2029 "trailing whitespace\n" . $herevet) && 2229 "trailing whitespace\n" . $herevet) &&
2030 $fix) { 2230 $fix) {
2031 $fixed[$linenr - 1] =~ s/\s+$//; 2231 $fixed[$fixlinenr] =~ s/\s+$//;
2032 } 2232 }
2033 2233
2034 $rpt_cleaners = 1; 2234 $rpt_cleaners = 1;
@@ -2049,7 +2249,7 @@ sub process {
2049# Only applies when adding the entry originally, after that we do not have 2249# Only applies when adding the entry originally, after that we do not have
2050# sufficient context to determine whether it is indeed long enough. 2250# sufficient context to determine whether it is indeed long enough.
2051 if ($realfile =~ /Kconfig/ && 2251 if ($realfile =~ /Kconfig/ &&
2052 $line =~ /.\s*config\s+/) { 2252 $line =~ /^\+\s*config\s+/) {
2053 my $length = 0; 2253 my $length = 0;
2054 my $cnt = $realcnt; 2254 my $cnt = $realcnt;
2055 my $ln = $linenr + 1; 2255 my $ln = $linenr + 1;
@@ -2062,10 +2262,11 @@ sub process {
2062 $is_end = $lines[$ln - 1] =~ /^\+/; 2262 $is_end = $lines[$ln - 1] =~ /^\+/;
2063 2263
2064 next if ($f =~ /^-/); 2264 next if ($f =~ /^-/);
2265 last if (!$file && $f =~ /^\@\@/);
2065 2266
2066 if ($lines[$ln - 1] =~ /.\s*(?:bool|tristate)\s*\"/) { 2267 if ($lines[$ln - 1] =~ /^\+\s*(?:bool|tristate)\s*\"/) {
2067 $is_start = 1; 2268 $is_start = 1;
2068 } elsif ($lines[$ln - 1] =~ /.\s*(?:---)?help(?:---)?$/) { 2269 } elsif ($lines[$ln - 1] =~ /^\+\s*(?:---)?help(?:---)?$/) {
2069 $length = -1; 2270 $length = -1;
2070 } 2271 }
2071 2272
@@ -2161,12 +2362,18 @@ sub process {
2161 "quoted string split across lines\n" . $hereprev); 2362 "quoted string split across lines\n" . $hereprev);
2162 } 2363 }
2163 2364
2365# check for missing a space in a string concatination
2366 if ($prevrawline =~ /[^\\]\w"$/ && $rawline =~ /^\+[\t ]+"\w/) {
2367 WARN('MISSING_SPACE',
2368 "break quoted strings at a space character\n" . $hereprev);
2369 }
2370
2164# check for spaces before a quoted newline 2371# check for spaces before a quoted newline
2165 if ($rawline =~ /^.*\".*\s\\n/) { 2372 if ($rawline =~ /^.*\".*\s\\n/) {
2166 if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE", 2373 if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
2167 "unnecessary whitespace before a quoted newline\n" . $herecurr) && 2374 "unnecessary whitespace before a quoted newline\n" . $herecurr) &&
2168 $fix) { 2375 $fix) {
2169 $fixed[$linenr - 1] =~ s/^(\+.*\".*)\s+\\n/$1\\n/; 2376 $fixed[$fixlinenr] =~ s/^(\+.*\".*)\s+\\n/$1\\n/;
2170 } 2377 }
2171 2378
2172 } 2379 }
@@ -2203,7 +2410,7 @@ sub process {
2203 if (ERROR("CODE_INDENT", 2410 if (ERROR("CODE_INDENT",
2204 "code indent should use tabs where possible\n" . $herevet) && 2411 "code indent should use tabs where possible\n" . $herevet) &&
2205 $fix) { 2412 $fix) {
2206 $fixed[$linenr - 1] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e; 2413 $fixed[$fixlinenr] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e;
2207 } 2414 }
2208 } 2415 }
2209 2416
@@ -2213,9 +2420,9 @@ sub process {
2213 if (WARN("SPACE_BEFORE_TAB", 2420 if (WARN("SPACE_BEFORE_TAB",
2214 "please, no space before tabs\n" . $herevet) && 2421 "please, no space before tabs\n" . $herevet) &&
2215 $fix) { 2422 $fix) {
2216 while ($fixed[$linenr - 1] =~ 2423 while ($fixed[$fixlinenr] =~
2217 s/(^\+.*) {8,8}+\t/$1\t\t/) {} 2424 s/(^\+.*) {8,8}+\t/$1\t\t/) {}
2218 while ($fixed[$linenr - 1] =~ 2425 while ($fixed[$fixlinenr] =~
2219 s/(^\+.*) +\t/$1\t/) {} 2426 s/(^\+.*) +\t/$1\t/) {}
2220 } 2427 }
2221 } 2428 }
@@ -2249,19 +2456,19 @@ sub process {
2249 if (CHK("PARENTHESIS_ALIGNMENT", 2456 if (CHK("PARENTHESIS_ALIGNMENT",
2250 "Alignment should match open parenthesis\n" . $hereprev) && 2457 "Alignment should match open parenthesis\n" . $hereprev) &&
2251 $fix && $line =~ /^\+/) { 2458 $fix && $line =~ /^\+/) {
2252 $fixed[$linenr - 1] =~ 2459 $fixed[$fixlinenr] =~
2253 s/^\+[ \t]*/\+$goodtabindent/; 2460 s/^\+[ \t]*/\+$goodtabindent/;
2254 } 2461 }
2255 } 2462 }
2256 } 2463 }
2257 } 2464 }
2258 2465
2259 if ($line =~ /^\+.*\*[ \t]*\)[ \t]+(?!$Assignment|$Arithmetic)/) { 2466 if ($line =~ /^\+.*\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|{)/) {
2260 if (CHK("SPACING", 2467 if (CHK("SPACING",
2261 "No space is necessary after a cast\n" . $hereprev) && 2468 "No space is necessary after a cast\n" . $herecurr) &&
2262 $fix) { 2469 $fix) {
2263 $fixed[$linenr - 1] =~ 2470 $fixed[$fixlinenr] =~
2264 s/^(\+.*\*[ \t]*\))[ \t]+/$1/; 2471 s/(\(\s*$Type\s*\))[ \t]+/$1/;
2265 } 2472 }
2266 } 2473 }
2267 2474
@@ -2291,10 +2498,44 @@ sub process {
2291 "networking block comments put the trailing */ on a separate line\n" . $herecurr); 2498 "networking block comments put the trailing */ on a separate line\n" . $herecurr);
2292 } 2499 }
2293 2500
2501# check for missing blank lines after struct/union declarations
2502# with exceptions for various attributes and macros
2503 if ($prevline =~ /^[\+ ]};?\s*$/ &&
2504 $line =~ /^\+/ &&
2505 !($line =~ /^\+\s*$/ ||
2506 $line =~ /^\+\s*EXPORT_SYMBOL/ ||
2507 $line =~ /^\+\s*MODULE_/i ||
2508 $line =~ /^\+\s*\#\s*(?:end|elif|else)/ ||
2509 $line =~ /^\+[a-z_]*init/ ||
2510 $line =~ /^\+\s*(?:static\s+)?[A-Z_]*ATTR/ ||
2511 $line =~ /^\+\s*DECLARE/ ||
2512 $line =~ /^\+\s*__setup/)) {
2513 if (CHK("LINE_SPACING",
2514 "Please use a blank line after function/struct/union/enum declarations\n" . $hereprev) &&
2515 $fix) {
2516 fix_insert_line($fixlinenr, "\+");
2517 }
2518 }
2519
2520# check for multiple consecutive blank lines
2521 if ($prevline =~ /^[\+ ]\s*$/ &&
2522 $line =~ /^\+\s*$/ &&
2523 $last_blank_line != ($linenr - 1)) {
2524 if (CHK("LINE_SPACING",
2525 "Please don't use multiple blank lines\n" . $hereprev) &&
2526 $fix) {
2527 fix_delete_line($fixlinenr, $rawline);
2528 }
2529
2530 $last_blank_line = $linenr;
2531 }
2532
2294# check for missing blank lines after declarations 2533# check for missing blank lines after declarations
2295 if ($sline =~ /^\+\s+\S/ && #Not at char 1 2534 if ($sline =~ /^\+\s+\S/ && #Not at char 1
2296 # actual declarations 2535 # actual declarations
2297 ($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ || 2536 ($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
2537 # function pointer declarations
2538 $prevline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
2298 # foo bar; where foo is some local typedef or #define 2539 # foo bar; where foo is some local typedef or #define
2299 $prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ || 2540 $prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
2300 # known declaration macros 2541 # known declaration macros
@@ -2307,6 +2548,8 @@ sub process {
2307 $prevline =~ /(?:\{\s*|\\)$/) && 2548 $prevline =~ /(?:\{\s*|\\)$/) &&
2308 # looks like a declaration 2549 # looks like a declaration
2309 !($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ || 2550 !($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
2551 # function pointer declarations
2552 $sline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
2310 # foo bar; where foo is some local typedef or #define 2553 # foo bar; where foo is some local typedef or #define
2311 $sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ || 2554 $sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
2312 # known declaration macros 2555 # known declaration macros
@@ -2321,8 +2564,11 @@ sub process {
2321 $sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/) && 2564 $sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/) &&
2322 # indentation of previous and current line are the same 2565 # indentation of previous and current line are the same
2323 (($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/)) { 2566 (($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/)) {
2324 WARN("SPACING", 2567 if (WARN("LINE_SPACING",
2325 "Missing a blank line after declarations\n" . $hereprev); 2568 "Missing a blank line after declarations\n" . $hereprev) &&
2569 $fix) {
2570 fix_insert_line($fixlinenr, "\+");
2571 }
2326 } 2572 }
2327 2573
2328# check for spaces at the beginning of a line. 2574# check for spaces at the beginning of a line.
@@ -2335,13 +2581,33 @@ sub process {
2335 if (WARN("LEADING_SPACE", 2581 if (WARN("LEADING_SPACE",
2336 "please, no spaces at the start of a line\n" . $herevet) && 2582 "please, no spaces at the start of a line\n" . $herevet) &&
2337 $fix) { 2583 $fix) {
2338 $fixed[$linenr - 1] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e; 2584 $fixed[$fixlinenr] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e;
2339 } 2585 }
2340 } 2586 }
2341 2587
2342# check we are in a valid C source file if not then ignore this hunk 2588# check we are in a valid C source file if not then ignore this hunk
2343 next if ($realfile !~ /\.(h|c)$/); 2589 next if ($realfile !~ /\.(h|c)$/);
2344 2590
2591# check indentation of any line with a bare else
2592# if the previous line is a break or return and is indented 1 tab more...
2593 if ($sline =~ /^\+([\t]+)(?:}[ \t]*)?else(?:[ \t]*{)?\s*$/) {
2594 my $tabs = length($1) + 1;
2595 if ($prevline =~ /^\+\t{$tabs,$tabs}(?:break|return)\b/) {
2596 WARN("UNNECESSARY_ELSE",
2597 "else is not generally useful after a break or return\n" . $hereprev);
2598 }
2599 }
2600
2601# check indentation of a line with a break;
2602# if the previous line is a goto or return and is indented the same # of tabs
2603 if ($sline =~ /^\+([\t]+)break\s*;\s*$/) {
2604 my $tabs = $1;
2605 if ($prevline =~ /^\+$tabs(?:goto|return)\b/) {
2606 WARN("UNNECESSARY_BREAK",
2607 "break is not useful after a goto or return\n" . $hereprev);
2608 }
2609 }
2610
2345# discourage the addition of CONFIG_EXPERIMENTAL in #if(def). 2611# discourage the addition of CONFIG_EXPERIMENTAL in #if(def).
2346 if ($line =~ /^\+\s*\#\s*if.*\bCONFIG_EXPERIMENTAL\b/) { 2612 if ($line =~ /^\+\s*\#\s*if.*\bCONFIG_EXPERIMENTAL\b/) {
2347 WARN("CONFIG_EXPERIMENTAL", 2613 WARN("CONFIG_EXPERIMENTAL",
@@ -2477,7 +2743,7 @@ sub process {
2477 2743
2478# if/while/etc brace do not go on next line, unless defining a do while loop, 2744# if/while/etc brace do not go on next line, unless defining a do while loop,
2479# or if that brace on the next line is for something else 2745# or if that brace on the next line is for something else
2480 if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) { 2746 if ($line =~ /(.*)\b((?:if|while|for|switch|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) {
2481 my $pre_ctx = "$1$2"; 2747 my $pre_ctx = "$1$2";
2482 2748
2483 my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0); 2749 my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0);
@@ -2504,7 +2770,7 @@ sub process {
2504 #print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n"; 2770 #print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n";
2505 #print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n"; 2771 #print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n";
2506 2772
2507 if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) { 2773 if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln - 1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
2508 ERROR("OPEN_BRACE", 2774 ERROR("OPEN_BRACE",
2509 "that open brace { should be on the previous line\n" . 2775 "that open brace { should be on the previous line\n" .
2510 "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n"); 2776 "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
@@ -2523,7 +2789,7 @@ sub process {
2523 } 2789 }
2524 2790
2525# Check relative indent for conditionals and blocks. 2791# Check relative indent for conditionals and blocks.
2526 if ($line =~ /\b(?:(?:if|while|for)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) { 2792 if ($line =~ /\b(?:(?:if|while|for|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
2527 ($stat, $cond, $line_nr_next, $remain_next, $off_next) = 2793 ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
2528 ctx_statement_block($linenr, $realcnt, 0) 2794 ctx_statement_block($linenr, $realcnt, 0)
2529 if (!defined $stat); 2795 if (!defined $stat);
@@ -2654,8 +2920,18 @@ sub process {
2654# check for initialisation to aggregates open brace on the next line 2920# check for initialisation to aggregates open brace on the next line
2655 if ($line =~ /^.\s*{/ && 2921 if ($line =~ /^.\s*{/ &&
2656 $prevline =~ /(?:^|[^=])=\s*$/) { 2922 $prevline =~ /(?:^|[^=])=\s*$/) {
2657 ERROR("OPEN_BRACE", 2923 if (ERROR("OPEN_BRACE",
2658 "that open brace { should be on the previous line\n" . $hereprev); 2924 "that open brace { should be on the previous line\n" . $hereprev) &&
2925 $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
2926 fix_delete_line($fixlinenr - 1, $prevrawline);
2927 fix_delete_line($fixlinenr, $rawline);
2928 my $fixedline = $prevrawline;
2929 $fixedline =~ s/\s*=\s*$/ = {/;
2930 fix_insert_line($fixlinenr, $fixedline);
2931 $fixedline = $line;
2932 $fixedline =~ s/^(.\s*){\s*/$1/;
2933 fix_insert_line($fixlinenr, $fixedline);
2934 }
2659 } 2935 }
2660 2936
2661# 2937#
@@ -2680,10 +2956,10 @@ sub process {
2680 if (ERROR("C99_COMMENTS", 2956 if (ERROR("C99_COMMENTS",
2681 "do not use C99 // comments\n" . $herecurr) && 2957 "do not use C99 // comments\n" . $herecurr) &&
2682 $fix) { 2958 $fix) {
2683 my $line = $fixed[$linenr - 1]; 2959 my $line = $fixed[$fixlinenr];
2684 if ($line =~ /\/\/(.*)$/) { 2960 if ($line =~ /\/\/(.*)$/) {
2685 my $comment = trim($1); 2961 my $comment = trim($1);
2686 $fixed[$linenr - 1] =~ s@\/\/(.*)$@/\* $comment \*/@; 2962 $fixed[$fixlinenr] =~ s@\/\/(.*)$@/\* $comment \*/@;
2687 } 2963 }
2688 } 2964 }
2689 } 2965 }
@@ -2742,7 +3018,7 @@ sub process {
2742 "do not initialise globals to 0 or NULL\n" . 3018 "do not initialise globals to 0 or NULL\n" .
2743 $herecurr) && 3019 $herecurr) &&
2744 $fix) { 3020 $fix) {
2745 $fixed[$linenr - 1] =~ s/($Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/$1;/; 3021 $fixed[$fixlinenr] =~ s/($Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/$1;/;
2746 } 3022 }
2747 } 3023 }
2748# check for static initialisers. 3024# check for static initialisers.
@@ -2751,10 +3027,17 @@ sub process {
2751 "do not initialise statics to 0 or NULL\n" . 3027 "do not initialise statics to 0 or NULL\n" .
2752 $herecurr) && 3028 $herecurr) &&
2753 $fix) { 3029 $fix) {
2754 $fixed[$linenr - 1] =~ s/(\bstatic\s.*?)\s*=\s*(0|NULL|false)\s*;/$1;/; 3030 $fixed[$fixlinenr] =~ s/(\bstatic\s.*?)\s*=\s*(0|NULL|false)\s*;/$1;/;
2755 } 3031 }
2756 } 3032 }
2757 3033
3034# check for misordered declarations of char/short/int/long with signed/unsigned
3035 while ($sline =~ m{(\b$TypeMisordered\b)}g) {
3036 my $tmp = trim($1);
3037 WARN("MISORDERED_TYPE",
3038 "type '$tmp' should be specified in [[un]signed] [short|int|long|long long] order\n" . $herecurr);
3039 }
3040
2758# check for static const char * arrays. 3041# check for static const char * arrays.
2759 if ($line =~ /\bstatic\s+const\s+char\s*\*\s*(\w+)\s*\[\s*\]\s*=\s*/) { 3042 if ($line =~ /\bstatic\s+const\s+char\s*\*\s*(\w+)\s*\[\s*\]\s*=\s*/) {
2760 WARN("STATIC_CONST_CHAR_ARRAY", 3043 WARN("STATIC_CONST_CHAR_ARRAY",
@@ -2781,7 +3064,7 @@ sub process {
2781 if (ERROR("FUNCTION_WITHOUT_ARGS", 3064 if (ERROR("FUNCTION_WITHOUT_ARGS",
2782 "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) && 3065 "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&
2783 $fix) { 3066 $fix) {
2784 $fixed[$linenr - 1] =~ s/(\b($Type)\s+($Ident))\s*\(\s*\)/$2 $3(void)/; 3067 $fixed[$fixlinenr] =~ s/(\b($Type)\s+($Ident))\s*\(\s*\)/$2 $3(void)/;
2785 } 3068 }
2786 } 3069 }
2787 3070
@@ -2790,7 +3073,7 @@ sub process {
2790 if (WARN("DEFINE_PCI_DEVICE_TABLE", 3073 if (WARN("DEFINE_PCI_DEVICE_TABLE",
2791 "Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) && 3074 "Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) &&
2792 $fix) { 3075 $fix) {
2793 $fixed[$linenr - 1] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /; 3076 $fixed[$fixlinenr] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /;
2794 } 3077 }
2795 } 3078 }
2796 3079
@@ -2827,7 +3110,7 @@ sub process {
2827 my $sub_from = $ident; 3110 my $sub_from = $ident;
2828 my $sub_to = $ident; 3111 my $sub_to = $ident;
2829 $sub_to =~ s/\Q$from\E/$to/; 3112 $sub_to =~ s/\Q$from\E/$to/;
2830 $fixed[$linenr - 1] =~ 3113 $fixed[$fixlinenr] =~
2831 s@\Q$sub_from\E@$sub_to@; 3114 s@\Q$sub_from\E@$sub_to@;
2832 } 3115 }
2833 } 3116 }
@@ -2855,7 +3138,7 @@ sub process {
2855 my $sub_from = $match; 3138 my $sub_from = $match;
2856 my $sub_to = $match; 3139 my $sub_to = $match;
2857 $sub_to =~ s/\Q$from\E/$to/; 3140 $sub_to =~ s/\Q$from\E/$to/;
2858 $fixed[$linenr - 1] =~ 3141 $fixed[$fixlinenr] =~
2859 s@\Q$sub_from\E@$sub_to@; 3142 s@\Q$sub_from\E@$sub_to@;
2860 } 3143 }
2861 } 3144 }
@@ -2917,7 +3200,7 @@ sub process {
2917 if (WARN("PREFER_PR_LEVEL", 3200 if (WARN("PREFER_PR_LEVEL",
2918 "Prefer pr_warn(... to pr_warning(...\n" . $herecurr) && 3201 "Prefer pr_warn(... to pr_warning(...\n" . $herecurr) &&
2919 $fix) { 3202 $fix) {
2920 $fixed[$linenr - 1] =~ 3203 $fixed[$fixlinenr] =~
2921 s/\bpr_warning\b/pr_warn/; 3204 s/\bpr_warning\b/pr_warn/;
2922 } 3205 }
2923 } 3206 }
@@ -2933,17 +3216,40 @@ sub process {
2933 3216
2934# function brace can't be on same line, except for #defines of do while, 3217# function brace can't be on same line, except for #defines of do while,
2935# or if closed on same line 3218# or if closed on same line
2936 if (($line=~/$Type\s*$Ident\(.*\).*\s{/) and 3219 if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and
2937 !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) { 3220 !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) {
2938 ERROR("OPEN_BRACE", 3221 if (ERROR("OPEN_BRACE",
2939 "open brace '{' following function declarations go on the next line\n" . $herecurr); 3222 "open brace '{' following function declarations go on the next line\n" . $herecurr) &&
3223 $fix) {
3224 fix_delete_line($fixlinenr, $rawline);
3225 my $fixed_line = $rawline;
3226 $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*){(.*)$/;
3227 my $line1 = $1;
3228 my $line2 = $2;
3229 fix_insert_line($fixlinenr, ltrim($line1));
3230 fix_insert_line($fixlinenr, "\+{");
3231 if ($line2 !~ /^\s*$/) {
3232 fix_insert_line($fixlinenr, "\+\t" . trim($line2));
3233 }
3234 }
2940 } 3235 }
2941 3236
2942# open braces for enum, union and struct go on the same line. 3237# open braces for enum, union and struct go on the same line.
2943 if ($line =~ /^.\s*{/ && 3238 if ($line =~ /^.\s*{/ &&
2944 $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) { 3239 $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
2945 ERROR("OPEN_BRACE", 3240 if (ERROR("OPEN_BRACE",
2946 "open brace '{' following $1 go on the same line\n" . $hereprev); 3241 "open brace '{' following $1 go on the same line\n" . $hereprev) &&
3242 $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
3243 fix_delete_line($fixlinenr - 1, $prevrawline);
3244 fix_delete_line($fixlinenr, $rawline);
3245 my $fixedline = rtrim($prevrawline) . " {";
3246 fix_insert_line($fixlinenr, $fixedline);
3247 $fixedline = $rawline;
3248 $fixedline =~ s/^(.\s*){\s*/$1\t/;
3249 if ($fixedline !~ /^\+\s*$/) {
3250 fix_insert_line($fixlinenr, $fixedline);
3251 }
3252 }
2947 } 3253 }
2948 3254
2949# missing space after union, struct or enum definition 3255# missing space after union, struct or enum definition
@@ -2951,7 +3257,7 @@ sub process {
2951 if (WARN("SPACING", 3257 if (WARN("SPACING",
2952 "missing space after $1 definition\n" . $herecurr) && 3258 "missing space after $1 definition\n" . $herecurr) &&
2953 $fix) { 3259 $fix) {
2954 $fixed[$linenr - 1] =~ 3260 $fixed[$fixlinenr] =~
2955 s/^(.\s*(?:typedef\s+)?(?:enum|union|struct)(?:\s+$Ident){1,2})([=\{])/$1 $2/; 3261 s/^(.\s*(?:typedef\s+)?(?:enum|union|struct)(?:\s+$Ident){1,2})([=\{])/$1 $2/;
2956 } 3262 }
2957 } 3263 }
@@ -3021,7 +3327,7 @@ sub process {
3021 } 3327 }
3022 3328
3023 if (show_type("SPACING") && $fix) { 3329 if (show_type("SPACING") && $fix) {
3024 $fixed[$linenr - 1] =~ 3330 $fixed[$fixlinenr] =~
3025 s/^(.\s*)$Declare\s*\(\s*\*\s*$Ident\s*\)\s*\(/$1 . $declare . $post_declare_space . '(*' . $funcname . ')('/ex; 3331 s/^(.\s*)$Declare\s*\(\s*\*\s*$Ident\s*\)\s*\(/$1 . $declare . $post_declare_space . '(*' . $funcname . ')('/ex;
3026 } 3332 }
3027 } 3333 }
@@ -3038,7 +3344,7 @@ sub process {
3038 if (ERROR("BRACKET_SPACE", 3344 if (ERROR("BRACKET_SPACE",
3039 "space prohibited before open square bracket '['\n" . $herecurr) && 3345 "space prohibited before open square bracket '['\n" . $herecurr) &&
3040 $fix) { 3346 $fix) {
3041 $fixed[$linenr - 1] =~ 3347 $fixed[$fixlinenr] =~
3042 s/^(\+.*?)\s+\[/$1\[/; 3348 s/^(\+.*?)\s+\[/$1\[/;
3043 } 3349 }
3044 } 3350 }
@@ -3073,7 +3379,7 @@ sub process {
3073 if (WARN("SPACING", 3379 if (WARN("SPACING",
3074 "space prohibited between function name and open parenthesis '('\n" . $herecurr) && 3380 "space prohibited between function name and open parenthesis '('\n" . $herecurr) &&
3075 $fix) { 3381 $fix) {
3076 $fixed[$linenr - 1] =~ 3382 $fixed[$fixlinenr] =~
3077 s/\b$name\s+\(/$name\(/; 3383 s/\b$name\s+\(/$name\(/;
3078 } 3384 }
3079 } 3385 }
@@ -3341,8 +3647,8 @@ sub process {
3341 $fixed_line = $fixed_line . $fix_elements[$#elements]; 3647 $fixed_line = $fixed_line . $fix_elements[$#elements];
3342 } 3648 }
3343 3649
3344 if ($fix && $line_fixed && $fixed_line ne $fixed[$linenr - 1]) { 3650 if ($fix && $line_fixed && $fixed_line ne $fixed[$fixlinenr]) {
3345 $fixed[$linenr - 1] = $fixed_line; 3651 $fixed[$fixlinenr] = $fixed_line;
3346 } 3652 }
3347 3653
3348 3654
@@ -3353,7 +3659,7 @@ sub process {
3353 if (WARN("SPACING", 3659 if (WARN("SPACING",
3354 "space prohibited before semicolon\n" . $herecurr) && 3660 "space prohibited before semicolon\n" . $herecurr) &&
3355 $fix) { 3661 $fix) {
3356 1 while $fixed[$linenr - 1] =~ 3662 1 while $fixed[$fixlinenr] =~
3357 s/^(\+.*\S)\s+;/$1;/; 3663 s/^(\+.*\S)\s+;/$1;/;
3358 } 3664 }
3359 } 3665 }
@@ -3386,7 +3692,7 @@ sub process {
3386 if (ERROR("SPACING", 3692 if (ERROR("SPACING",
3387 "space required before the open brace '{'\n" . $herecurr) && 3693 "space required before the open brace '{'\n" . $herecurr) &&
3388 $fix) { 3694 $fix) {
3389 $fixed[$linenr - 1] =~ s/^(\+.*(?:do|\))){/$1 {/; 3695 $fixed[$fixlinenr] =~ s/^(\+.*(?:do|\))){/$1 {/;
3390 } 3696 }
3391 } 3697 }
3392 3698
@@ -3404,7 +3710,7 @@ sub process {
3404 if (ERROR("SPACING", 3710 if (ERROR("SPACING",
3405 "space required after that close brace '}'\n" . $herecurr) && 3711 "space required after that close brace '}'\n" . $herecurr) &&
3406 $fix) { 3712 $fix) {
3407 $fixed[$linenr - 1] =~ 3713 $fixed[$fixlinenr] =~
3408 s/}((?!(?:,|;|\)))\S)/} $1/; 3714 s/}((?!(?:,|;|\)))\S)/} $1/;
3409 } 3715 }
3410 } 3716 }
@@ -3414,7 +3720,7 @@ sub process {
3414 if (ERROR("SPACING", 3720 if (ERROR("SPACING",
3415 "space prohibited after that open square bracket '['\n" . $herecurr) && 3721 "space prohibited after that open square bracket '['\n" . $herecurr) &&
3416 $fix) { 3722 $fix) {
3417 $fixed[$linenr - 1] =~ 3723 $fixed[$fixlinenr] =~
3418 s/\[\s+/\[/; 3724 s/\[\s+/\[/;
3419 } 3725 }
3420 } 3726 }
@@ -3422,7 +3728,7 @@ sub process {
3422 if (ERROR("SPACING", 3728 if (ERROR("SPACING",
3423 "space prohibited before that close square bracket ']'\n" . $herecurr) && 3729 "space prohibited before that close square bracket ']'\n" . $herecurr) &&
3424 $fix) { 3730 $fix) {
3425 $fixed[$linenr - 1] =~ 3731 $fixed[$fixlinenr] =~
3426 s/\s+\]/\]/; 3732 s/\s+\]/\]/;
3427 } 3733 }
3428 } 3734 }
@@ -3433,7 +3739,7 @@ sub process {
3433 if (ERROR("SPACING", 3739 if (ERROR("SPACING",
3434 "space prohibited after that open parenthesis '('\n" . $herecurr) && 3740 "space prohibited after that open parenthesis '('\n" . $herecurr) &&
3435 $fix) { 3741 $fix) {
3436 $fixed[$linenr - 1] =~ 3742 $fixed[$fixlinenr] =~
3437 s/\(\s+/\(/; 3743 s/\(\s+/\(/;
3438 } 3744 }
3439 } 3745 }
@@ -3443,18 +3749,27 @@ sub process {
3443 if (ERROR("SPACING", 3749 if (ERROR("SPACING",
3444 "space prohibited before that close parenthesis ')'\n" . $herecurr) && 3750 "space prohibited before that close parenthesis ')'\n" . $herecurr) &&
3445 $fix) { 3751 $fix) {
3446 $fixed[$linenr - 1] =~ 3752 print("fixlinenr: <$fixlinenr> fixed[fixlinenr]: <$fixed[$fixlinenr]>\n");
3753 $fixed[$fixlinenr] =~
3447 s/\s+\)/\)/; 3754 s/\s+\)/\)/;
3448 } 3755 }
3449 } 3756 }
3450 3757
3758# check unnecessary parentheses around addressof/dereference single $Lvals
3759# ie: &(foo->bar) should be &foo->bar and *(foo->bar) should be *foo->bar
3760
3761 while ($line =~ /(?:[^&]&\s*|\*)\(\s*($Ident\s*(?:$Member\s*)+)\s*\)/g) {
3762 CHK("UNNECESSARY_PARENTHESES",
3763 "Unnecessary parentheses around $1\n" . $herecurr);
3764 }
3765
3451#goto labels aren't indented, allow a single space however 3766#goto labels aren't indented, allow a single space however
3452 if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and 3767 if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
3453 !($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) { 3768 !($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) {
3454 if (WARN("INDENTED_LABEL", 3769 if (WARN("INDENTED_LABEL",
3455 "labels should not be indented\n" . $herecurr) && 3770 "labels should not be indented\n" . $herecurr) &&
3456 $fix) { 3771 $fix) {
3457 $fixed[$linenr - 1] =~ 3772 $fixed[$fixlinenr] =~
3458 s/^(.)\s+/$1/; 3773 s/^(.)\s+/$1/;
3459 } 3774 }
3460 } 3775 }
@@ -3516,7 +3831,7 @@ sub process {
3516 if (ERROR("SPACING", 3831 if (ERROR("SPACING",
3517 "space required before the open parenthesis '('\n" . $herecurr) && 3832 "space required before the open parenthesis '('\n" . $herecurr) &&
3518 $fix) { 3833 $fix) {
3519 $fixed[$linenr - 1] =~ 3834 $fixed[$fixlinenr] =~
3520 s/\b(if|while|for|switch)\(/$1 \(/; 3835 s/\b(if|while|for|switch)\(/$1 \(/;
3521 } 3836 }
3522 } 3837 }
@@ -3606,7 +3921,7 @@ sub process {
3606# if should not continue a brace 3921# if should not continue a brace
3607 if ($line =~ /}\s*if\b/) { 3922 if ($line =~ /}\s*if\b/) {
3608 ERROR("TRAILING_STATEMENTS", 3923 ERROR("TRAILING_STATEMENTS",
3609 "trailing statements should be on next line\n" . 3924 "trailing statements should be on next line (or did you mean 'else if'?)\n" .
3610 $herecurr); 3925 $herecurr);
3611 } 3926 }
3612# case and default should not have general statements after them 3927# case and default should not have general statements after them
@@ -3622,14 +3937,26 @@ sub process {
3622 3937
3623 # Check for }<nl>else {, these must be at the same 3938 # Check for }<nl>else {, these must be at the same
3624 # indent level to be relevant to each other. 3939 # indent level to be relevant to each other.
3625 if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ and 3940 if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ &&
3626 $previndent == $indent) { 3941 $previndent == $indent) {
3627 ERROR("ELSE_AFTER_BRACE", 3942 if (ERROR("ELSE_AFTER_BRACE",
3628 "else should follow close brace '}'\n" . $hereprev); 3943 "else should follow close brace '}'\n" . $hereprev) &&
3944 $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
3945 fix_delete_line($fixlinenr - 1, $prevrawline);
3946 fix_delete_line($fixlinenr, $rawline);
3947 my $fixedline = $prevrawline;
3948 $fixedline =~ s/}\s*$//;
3949 if ($fixedline !~ /^\+\s*$/) {
3950 fix_insert_line($fixlinenr, $fixedline);
3951 }
3952 $fixedline = $rawline;
3953 $fixedline =~ s/^(.\s*)else/$1} else/;
3954 fix_insert_line($fixlinenr, $fixedline);
3955 }
3629 } 3956 }
3630 3957
3631 if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ and 3958 if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ &&
3632 $previndent == $indent) { 3959 $previndent == $indent) {
3633 my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0); 3960 my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0);
3634 3961
3635 # Find out what is on the end of the line after the 3962 # Find out what is on the end of the line after the
@@ -3638,8 +3965,18 @@ sub process {
3638 $s =~ s/\n.*//g; 3965 $s =~ s/\n.*//g;
3639 3966
3640 if ($s =~ /^\s*;/) { 3967 if ($s =~ /^\s*;/) {
3641 ERROR("WHILE_AFTER_BRACE", 3968 if (ERROR("WHILE_AFTER_BRACE",
3642 "while should follow close brace '}'\n" . $hereprev); 3969 "while should follow close brace '}'\n" . $hereprev) &&
3970 $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
3971 fix_delete_line($fixlinenr - 1, $prevrawline);
3972 fix_delete_line($fixlinenr, $rawline);
3973 my $fixedline = $prevrawline;
3974 my $trailing = $rawline;
3975 $trailing =~ s/^\+//;
3976 $trailing = trim($trailing);
3977 $fixedline =~ s/}\s*$/} $trailing/;
3978 fix_insert_line($fixlinenr, $fixedline);
3979 }
3643 } 3980 }
3644 } 3981 }
3645 3982
@@ -3653,7 +3990,7 @@ sub process {
3653 "Avoid gcc v4.3+ binary constant extension: <$var>\n" . $herecurr) && 3990 "Avoid gcc v4.3+ binary constant extension: <$var>\n" . $herecurr) &&
3654 $fix) { 3991 $fix) {
3655 my $hexval = sprintf("0x%x", oct($var)); 3992 my $hexval = sprintf("0x%x", oct($var));
3656 $fixed[$linenr - 1] =~ 3993 $fixed[$fixlinenr] =~
3657 s/\b$var\b/$hexval/; 3994 s/\b$var\b/$hexval/;
3658 } 3995 }
3659 } 3996 }
@@ -3689,7 +4026,7 @@ sub process {
3689 if (WARN("WHITESPACE_AFTER_LINE_CONTINUATION", 4026 if (WARN("WHITESPACE_AFTER_LINE_CONTINUATION",
3690 "Whitespace after \\ makes next lines useless\n" . $herecurr) && 4027 "Whitespace after \\ makes next lines useless\n" . $herecurr) &&
3691 $fix) { 4028 $fix) {
3692 $fixed[$linenr - 1] =~ s/\s+$//; 4029 $fixed[$fixlinenr] =~ s/\s+$//;
3693 } 4030 }
3694 } 4031 }
3695 4032
@@ -3762,7 +4099,7 @@ sub process {
3762 $dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(), 4099 $dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(),
3763 $dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo(); 4100 $dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo();
3764 $dstat !~ /^[!~-]?(?:$Lval|$Constant)$/ && # 10 // foo() // !foo // ~foo // -foo // foo->bar // foo.bar->baz 4101 $dstat !~ /^[!~-]?(?:$Lval|$Constant)$/ && # 10 // foo() // !foo // ~foo // -foo // foo->bar // foo.bar->baz
3765 $dstat !~ /^'X'$/ && # character constants 4102 $dstat !~ /^'X'$/ && $dstat !~ /^'XX'$/ && # character constants
3766 $dstat !~ /$exceptions/ && 4103 $dstat !~ /$exceptions/ &&
3767 $dstat !~ /^\.$Ident\s*=/ && # .foo = 4104 $dstat !~ /^\.$Ident\s*=/ && # .foo =
3768 $dstat !~ /^(?:\#\s*$Ident|\#\s*$Constant)\s*$/ && # stringification #foo 4105 $dstat !~ /^(?:\#\s*$Ident|\#\s*$Constant)\s*$/ && # stringification #foo
@@ -4014,6 +4351,23 @@ sub process {
4014 } 4351 }
4015 } 4352 }
4016 4353
4354# check for unnecessary "Out of Memory" messages
4355 if ($line =~ /^\+.*\b$logFunctions\s*\(/ &&
4356 $prevline =~ /^[ \+]\s*if\s*\(\s*(\!\s*|NULL\s*==\s*)?($Lval)(\s*==\s*NULL\s*)?\s*\)/ &&
4357 (defined $1 || defined $3) &&
4358 $linenr > 3) {
4359 my $testval = $2;
4360 my $testline = $lines[$linenr - 3];
4361
4362 my ($s, $c) = ctx_statement_block($linenr - 3, $realcnt, 0);
4363# print("line: <$line>\nprevline: <$prevline>\ns: <$s>\nc: <$c>\n\n\n");
4364
4365 if ($c =~ /(?:^|\n)[ \+]\s*(?:$Type\s*)?\Q$testval\E\s*=\s*(?:\([^\)]*\)\s*)?\s*(?:devm_)?(?:[kv][czm]alloc(?:_node|_array)?\b|kstrdup|(?:dev_)?alloc_skb)/) {
4366 WARN("OOM_MESSAGE",
4367 "Possible unnecessary 'out of memory' message\n" . $hereprev);
4368 }
4369 }
4370
4017# check for bad placement of section $InitAttribute (e.g.: __initdata) 4371# check for bad placement of section $InitAttribute (e.g.: __initdata)
4018 if ($line =~ /(\b$InitAttribute\b)/) { 4372 if ($line =~ /(\b$InitAttribute\b)/) {
4019 my $attr = $1; 4373 my $attr = $1;
@@ -4027,7 +4381,7 @@ sub process {
4027 WARN("MISPLACED_INIT", 4381 WARN("MISPLACED_INIT",
4028 "$attr should be placed after $var\n" . $herecurr))) && 4382 "$attr should be placed after $var\n" . $herecurr))) &&
4029 $fix) { 4383 $fix) {
4030 $fixed[$linenr - 1] =~ s/(\bstatic\s+(?:const\s+)?)(?:$attr\s+)?($NonptrTypeWithAttr)\s+(?:$attr\s+)?($Ident(?:\[[^]]*\])?)\s*([=;])\s*/"$1" . trim(string_find_replace($2, "\\s*$attr\\s*", " ")) . " " . trim(string_find_replace($3, "\\s*$attr\\s*", "")) . " $attr" . ("$4" eq ";" ? ";" : " = ")/e; 4384 $fixed[$fixlinenr] =~ s/(\bstatic\s+(?:const\s+)?)(?:$attr\s+)?($NonptrTypeWithAttr)\s+(?:$attr\s+)?($Ident(?:\[[^]]*\])?)\s*([=;])\s*/"$1" . trim(string_find_replace($2, "\\s*$attr\\s*", " ")) . " " . trim(string_find_replace($3, "\\s*$attr\\s*", "")) . " $attr" . ("$4" eq ";" ? ";" : " = ")/e;
4031 } 4385 }
4032 } 4386 }
4033 } 4387 }
@@ -4041,7 +4395,7 @@ sub process {
4041 if (ERROR("INIT_ATTRIBUTE", 4395 if (ERROR("INIT_ATTRIBUTE",
4042 "Use of const init definition must use ${attr_prefix}initconst\n" . $herecurr) && 4396 "Use of const init definition must use ${attr_prefix}initconst\n" . $herecurr) &&
4043 $fix) { 4397 $fix) {
4044 $fixed[$linenr - 1] =~ 4398 $fixed[$fixlinenr] =~
4045 s/$InitAttributeData/${attr_prefix}initconst/; 4399 s/$InitAttributeData/${attr_prefix}initconst/;
4046 } 4400 }
4047 } 4401 }
@@ -4052,12 +4406,12 @@ sub process {
4052 if (ERROR("INIT_ATTRIBUTE", 4406 if (ERROR("INIT_ATTRIBUTE",
4053 "Use of $attr requires a separate use of const\n" . $herecurr) && 4407 "Use of $attr requires a separate use of const\n" . $herecurr) &&
4054 $fix) { 4408 $fix) {
4055 my $lead = $fixed[$linenr - 1] =~ 4409 my $lead = $fixed[$fixlinenr] =~
4056 /(^\+\s*(?:static\s+))/; 4410 /(^\+\s*(?:static\s+))/;
4057 $lead = rtrim($1); 4411 $lead = rtrim($1);
4058 $lead = "$lead " if ($lead !~ /^\+$/); 4412 $lead = "$lead " if ($lead !~ /^\+$/);
4059 $lead = "${lead}const "; 4413 $lead = "${lead}const ";
4060 $fixed[$linenr - 1] =~ s/(^\+\s*(?:static\s+))/$lead/; 4414 $fixed[$fixlinenr] =~ s/(^\+\s*(?:static\s+))/$lead/;
4061 } 4415 }
4062 } 4416 }
4063 4417
@@ -4070,7 +4424,7 @@ sub process {
4070 if (WARN("CONSTANT_CONVERSION", 4424 if (WARN("CONSTANT_CONVERSION",
4071 "$constant_func should be $func\n" . $herecurr) && 4425 "$constant_func should be $func\n" . $herecurr) &&
4072 $fix) { 4426 $fix) {
4073 $fixed[$linenr - 1] =~ s/\b$constant_func\b/$func/g; 4427 $fixed[$fixlinenr] =~ s/\b$constant_func\b/$func/g;
4074 } 4428 }
4075 } 4429 }
4076 4430
@@ -4120,7 +4474,7 @@ sub process {
4120 if (ERROR("SPACING", 4474 if (ERROR("SPACING",
4121 "exactly one space required after that #$1\n" . $herecurr) && 4475 "exactly one space required after that #$1\n" . $herecurr) &&
4122 $fix) { 4476 $fix) {
4123 $fixed[$linenr - 1] =~ 4477 $fixed[$fixlinenr] =~
4124 s/^(.\s*\#\s*(ifdef|ifndef|elif))\s{2,}/$1 /; 4478 s/^(.\s*\#\s*(ifdef|ifndef|elif))\s{2,}/$1 /;
4125 } 4479 }
4126 4480
@@ -4168,7 +4522,7 @@ sub process {
4168 if (WARN("INLINE", 4522 if (WARN("INLINE",
4169 "plain inline is preferred over $1\n" . $herecurr) && 4523 "plain inline is preferred over $1\n" . $herecurr) &&
4170 $fix) { 4524 $fix) {
4171 $fixed[$linenr - 1] =~ s/\b(__inline__|__inline)\b/inline/; 4525 $fixed[$fixlinenr] =~ s/\b(__inline__|__inline)\b/inline/;
4172 4526
4173 } 4527 }
4174 } 4528 }
@@ -4193,7 +4547,7 @@ sub process {
4193 if (WARN("PREFER_PRINTF", 4547 if (WARN("PREFER_PRINTF",
4194 "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) && 4548 "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) &&
4195 $fix) { 4549 $fix) {
4196 $fixed[$linenr - 1] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf\s*,\s*(.*)\)\s*\)\s*\)/"__printf(" . trim($1) . ")"/ex; 4550 $fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf\s*,\s*(.*)\)\s*\)\s*\)/"__printf(" . trim($1) . ")"/ex;
4197 4551
4198 } 4552 }
4199 } 4553 }
@@ -4204,7 +4558,7 @@ sub process {
4204 if (WARN("PREFER_SCANF", 4558 if (WARN("PREFER_SCANF",
4205 "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) && 4559 "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) &&
4206 $fix) { 4560 $fix) {
4207 $fixed[$linenr - 1] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\s*,\s*(.*)\)\s*\)\s*\)/"__scanf(" . trim($1) . ")"/ex; 4561 $fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\s*,\s*(.*)\)\s*\)\s*\)/"__scanf(" . trim($1) . ")"/ex;
4208 } 4562 }
4209 } 4563 }
4210 4564
@@ -4219,7 +4573,7 @@ sub process {
4219 if (WARN("SIZEOF_PARENTHESIS", 4573 if (WARN("SIZEOF_PARENTHESIS",
4220 "sizeof $1 should be sizeof($1)\n" . $herecurr) && 4574 "sizeof $1 should be sizeof($1)\n" . $herecurr) &&
4221 $fix) { 4575 $fix) {
4222 $fixed[$linenr - 1] =~ s/\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/"sizeof(" . trim($1) . ")"/ex; 4576 $fixed[$fixlinenr] =~ s/\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/"sizeof(" . trim($1) . ")"/ex;
4223 } 4577 }
4224 } 4578 }
4225 4579
@@ -4242,7 +4596,7 @@ sub process {
4242 if (WARN("PREFER_SEQ_PUTS", 4596 if (WARN("PREFER_SEQ_PUTS",
4243 "Prefer seq_puts to seq_printf\n" . $herecurr) && 4597 "Prefer seq_puts to seq_printf\n" . $herecurr) &&
4244 $fix) { 4598 $fix) {
4245 $fixed[$linenr - 1] =~ s/\bseq_printf\b/seq_puts/; 4599 $fixed[$fixlinenr] =~ s/\bseq_printf\b/seq_puts/;
4246 } 4600 }
4247 } 4601 }
4248 } 4602 }
@@ -4271,7 +4625,7 @@ sub process {
4271 if (WARN("PREFER_ETHER_ADDR_COPY", 4625 if (WARN("PREFER_ETHER_ADDR_COPY",
4272 "Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . $herecurr) && 4626 "Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . $herecurr) &&
4273 $fix) { 4627 $fix) {
4274 $fixed[$linenr - 1] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/; 4628 $fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
4275 } 4629 }
4276 } 4630 }
4277 4631
@@ -4359,7 +4713,7 @@ sub process {
4359 if (CHK("AVOID_EXTERNS", 4713 if (CHK("AVOID_EXTERNS",
4360 "extern prototypes should be avoided in .h files\n" . $herecurr) && 4714 "extern prototypes should be avoided in .h files\n" . $herecurr) &&
4361 $fix) { 4715 $fix) {
4362 $fixed[$linenr - 1] =~ s/(.*)\bextern\b\s*(.*)/$1$2/; 4716 $fixed[$fixlinenr] =~ s/(.*)\bextern\b\s*(.*)/$1$2/;
4363 } 4717 }
4364 } 4718 }
4365 4719
@@ -4419,23 +4773,24 @@ sub process {
4419 4773
4420# check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc 4774# check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc
4421 if ($^V && $^V ge 5.10.0 && 4775 if ($^V && $^V ge 5.10.0 &&
4422 $line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)/) { 4776 $line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)\s*,/) {
4423 my $oldfunc = $3; 4777 my $oldfunc = $3;
4424 my $a1 = $4; 4778 my $a1 = $4;
4425 my $a2 = $10; 4779 my $a2 = $10;
4426 my $newfunc = "kmalloc_array"; 4780 my $newfunc = "kmalloc_array";
4427 $newfunc = "kcalloc" if ($oldfunc eq "kzalloc"); 4781 $newfunc = "kcalloc" if ($oldfunc eq "kzalloc");
4428 if ($a1 =~ /^sizeof\s*\S/ || $a2 =~ /^sizeof\s*\S/) { 4782 my $r1 = $a1;
4783 my $r2 = $a2;
4784 if ($a1 =~ /^sizeof\s*\S/) {
4785 $r1 = $a2;
4786 $r2 = $a1;
4787 }
4788 if ($r1 !~ /^sizeof\b/ && $r2 =~ /^sizeof\s*\S/ &&
4789 !($r1 =~ /^$Constant$/ || $r1 =~ /^[A-Z_][A-Z0-9_]*$/)) {
4429 if (WARN("ALLOC_WITH_MULTIPLY", 4790 if (WARN("ALLOC_WITH_MULTIPLY",
4430 "Prefer $newfunc over $oldfunc with multiply\n" . $herecurr) && 4791 "Prefer $newfunc over $oldfunc with multiply\n" . $herecurr) &&
4431 $fix) { 4792 $fix) {
4432 my $r1 = $a1; 4793 $fixed[$fixlinenr] =~ s/\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)/$1 . ' = ' . "$newfunc(" . trim($r1) . ', ' . trim($r2)/e;
4433 my $r2 = $a2;
4434 if ($a1 =~ /^sizeof\s*\S/) {
4435 $r1 = $a2;
4436 $r2 = $a1;
4437 }
4438 $fixed[$linenr - 1] =~ s/\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)/$1 . ' = ' . "$newfunc(" . trim($r1) . ', ' . trim($r2)/e;
4439 4794
4440 } 4795 }
4441 } 4796 }
@@ -4459,17 +4814,17 @@ sub process {
4459 if (WARN("ONE_SEMICOLON", 4814 if (WARN("ONE_SEMICOLON",
4460 "Statements terminations use 1 semicolon\n" . $herecurr) && 4815 "Statements terminations use 1 semicolon\n" . $herecurr) &&
4461 $fix) { 4816 $fix) {
4462 $fixed[$linenr - 1] =~ s/(\s*;\s*){2,}$/;/g; 4817 $fixed[$fixlinenr] =~ s/(\s*;\s*){2,}$/;/g;
4463 } 4818 }
4464 } 4819 }
4465 4820
4466# check for case / default statements not preceeded by break/fallthrough/switch 4821# check for case / default statements not preceded by break/fallthrough/switch
4467 if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) { 4822 if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
4468 my $has_break = 0; 4823 my $has_break = 0;
4469 my $has_statement = 0; 4824 my $has_statement = 0;
4470 my $count = 0; 4825 my $count = 0;
4471 my $prevline = $linenr; 4826 my $prevline = $linenr;
4472 while ($prevline > 1 && $count < 3 && !$has_break) { 4827 while ($prevline > 1 && ($file || $count < 3) && !$has_break) {
4473 $prevline--; 4828 $prevline--;
4474 my $rline = $rawlines[$prevline - 1]; 4829 my $rline = $rawlines[$prevline - 1];
4475 my $fline = $lines[$prevline - 1]; 4830 my $fline = $lines[$prevline - 1];
@@ -4507,7 +4862,7 @@ sub process {
4507 if (WARN("USE_FUNC", 4862 if (WARN("USE_FUNC",
4508 "__func__ should be used instead of gcc specific __FUNCTION__\n" . $herecurr) && 4863 "__func__ should be used instead of gcc specific __FUNCTION__\n" . $herecurr) &&
4509 $fix) { 4864 $fix) {
4510 $fixed[$linenr - 1] =~ s/\b__FUNCTION__\b/__func__/g; 4865 $fixed[$fixlinenr] =~ s/\b__FUNCTION__\b/__func__/g;
4511 } 4866 }
4512 } 4867 }
4513 4868
@@ -4750,12 +5105,16 @@ sub process {
4750 hash_show_words(\%use_type, "Used"); 5105 hash_show_words(\%use_type, "Used");
4751 hash_show_words(\%ignore_type, "Ignored"); 5106 hash_show_words(\%ignore_type, "Ignored");
4752 5107
4753 if ($clean == 0 && $fix && "@rawlines" ne "@fixed") { 5108 if ($clean == 0 && $fix &&
5109 ("@rawlines" ne "@fixed" ||
5110 $#fixed_inserted >= 0 || $#fixed_deleted >= 0)) {
4754 my $newfile = $filename; 5111 my $newfile = $filename;
4755 $newfile .= ".EXPERIMENTAL-checkpatch-fixes" if (!$fix_inplace); 5112 $newfile .= ".EXPERIMENTAL-checkpatch-fixes" if (!$fix_inplace);
4756 my $linecount = 0; 5113 my $linecount = 0;
4757 my $f; 5114 my $f;
4758 5115
5116 @fixed = fix_inserted_deleted_lines(\@fixed, \@fixed_inserted, \@fixed_deleted);
5117
4759 open($f, '>', $newfile) 5118 open($f, '>', $newfile)
4760 or die "$P: Can't open $newfile for write\n"; 5119 or die "$P: Can't open $newfile for write\n";
4761 foreach my $fixed_line (@fixed) { 5120 foreach my $fixed_line (@fixed) {
@@ -4763,7 +5122,7 @@ sub process {
4763 if ($file) { 5122 if ($file) {
4764 if ($linecount > 3) { 5123 if ($linecount > 3) {
4765 $fixed_line =~ s/^\+//; 5124 $fixed_line =~ s/^\+//;
4766 print $f $fixed_line. "\n"; 5125 print $f $fixed_line . "\n";
4767 } 5126 }
4768 } else { 5127 } else {
4769 print $f $fixed_line . "\n"; 5128 print $f $fixed_line . "\n";