diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-07 00:14:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-07 00:14:42 -0400 |
commit | 33caee39925b887a99a2400dc5c980097c3573f9 (patch) | |
tree | 8e68ad97e1fee88c4a3f31453041f8d139f2027e /scripts | |
parent | 6456a0438b984186a0c9c8ecc9fe3d97b7ac3613 (diff) | |
parent | f84223087402c45179be5e7060c5736c17a7b271 (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-x | scripts/checkpatch.pl | 581 |
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{ | |||
309 | our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; | 309 | our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; |
310 | 310 | ||
311 | our $NonptrType; | 311 | our $NonptrType; |
312 | our $NonptrTypeMisordered; | ||
312 | our $NonptrTypeWithAttr; | 313 | our $NonptrTypeWithAttr; |
313 | our $Type; | 314 | our $Type; |
315 | our $TypeMisordered; | ||
314 | our $Declare; | 316 | our $Declare; |
317 | our $DeclareMisordered; | ||
315 | 318 | ||
316 | our $NON_ASCII_UTF8 = qr{ | 319 | our $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 | ||
359 | our @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 | |||
356 | our @typeList = ( | 378 | our @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 | ); |
376 | our @typeListWithAttr = ( | 400 | our @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 | ||
402 | our $declaration_macros = qr{(?x: | ||
403 | (?:$Storage\s+)?(?:DECLARE|DEFINE)_[A-Z]+\s*\(| | ||
404 | (?:$Storage\s+)?LIST_HEAD\s*\( | ||
405 | )}; | ||
406 | |||
407 | our $allowed_asm_includes = qr{(?x: | 426 | our $allowed_asm_includes = qr{(?x: |
408 | irq| | 427 | irq| |
409 | memory | 428 | memory |
@@ -413,6 +432,7 @@ our $allowed_asm_includes = qr{(?x: | |||
413 | sub build_types { | 432 | sub 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 | } |
443 | build_types(); | 476 | build_types(); |
444 | 477 | ||
@@ -452,6 +485,12 @@ our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/; | |||
452 | our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*}; | 485 | our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*}; |
453 | our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)}; | 486 | our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)}; |
454 | 487 | ||
488 | our $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 | |||
455 | sub deparenthesize { | 494 | sub 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 | ||
592 | sub 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 | ||
555 | my @rawlines = (); | 622 | my @rawlines = (); |
556 | my @lines = (); | 623 | my @lines = (); |
557 | my @fixed = (); | 624 | my @fixed = (); |
625 | my @fixed_inserted = (); | ||
626 | my @fixed_deleted = (); | ||
627 | my $fixlinenr = -1; | ||
628 | |||
558 | my $vname; | 629 | my $vname; |
559 | for my $filename (@ARGV) { | 630 | for 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 | ||
588 | exit($exit); | 662 | exit($exit); |
@@ -674,6 +748,18 @@ sub format_email { | |||
674 | return $formatted_email; | 748 | return $formatted_email; |
675 | } | 749 | } |
676 | 750 | ||
751 | sub 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 | |||
677 | sub which_conf { | 763 | sub 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 | ||
1572 | sub 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 | |||
1584 | sub 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 | |||
1635 | sub 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 | |||
1645 | sub 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 | |||
1486 | sub ERROR { | 1656 | sub 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"; |