diff options
author | Andy Whitcroft <apw@shadowen.org> | 2009-01-06 17:41:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-06 18:59:16 -0500 |
commit | 65863862ba112bf4d06d5ebc142b9d746d1ee955 (patch) | |
tree | 923755463967ded1f6f6d0e5a09cb92a628ac005 | |
parent | fae17daed7312bae708df0cce7e93971308698b5 (diff) |
checkpatch: dissallow spaces between stars in pointer types
Disallow spaces within multiple pointer stars (*) in both casts and
definitions. Both of these would now be reported:
(char * *)
char * *foo;
Also now consistently detects and reports the attributes within these
structures making the error report itself clearer.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rwxr-xr-x | scripts/checkpatch.pl | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 45a97c9f4c9b..850783674278 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -191,7 +191,7 @@ sub build_types { | |||
191 | }x; | 191 | }x; |
192 | $Type = qr{ | 192 | $Type = qr{ |
193 | $NonptrType | 193 | $NonptrType |
194 | (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)? | 194 | (?:[\s\*]+\s*const|[\s\*]+|(?:\s*\[\s*\])+)? |
195 | (?:\s+$Inline|\s+$Modifier)* | 195 | (?:\s+$Inline|\s+$Modifier)* |
196 | }x; | 196 | }x; |
197 | $Declare = qr{(?:$Storage\s+)?$Type}; | 197 | $Declare = qr{(?:$Storage\s+)?$Type}; |
@@ -1344,7 +1344,7 @@ sub process { | |||
1344 | } | 1344 | } |
1345 | 1345 | ||
1346 | # any (foo ... *) is a pointer cast, and foo is a type | 1346 | # any (foo ... *) is a pointer cast, and foo is a type |
1347 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/sg) { | 1347 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*[\s\*]+\s*\)/sg) { |
1348 | possible($1, "C:" . $s); | 1348 | possible($1, "C:" . $s); |
1349 | } | 1349 | } |
1350 | 1350 | ||
@@ -1618,21 +1618,39 @@ sub process { | |||
1618 | } | 1618 | } |
1619 | 1619 | ||
1620 | # * goes on variable not on type | 1620 | # * goes on variable not on type |
1621 | if ($line =~ m{\($NonptrType(\*+)(?:\s+const)?\)}) { | 1621 | # (char*[ const]) |
1622 | ERROR("\"(foo$1)\" should be \"(foo $1)\"\n" . | 1622 | if ($line =~ m{\($NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)*)\)}) { |
1623 | $herecurr); | 1623 | my ($from, $to) = ($1, $1); |
1624 | 1624 | ||
1625 | } elsif ($line =~ m{\($NonptrType\s+(\*+)(?!\s+const)\s+\)}) { | 1625 | # Should start with a space. |
1626 | ERROR("\"(foo $1 )\" should be \"(foo $1)\"\n" . | 1626 | $to =~ s/^(\S)/ $1/; |
1627 | $herecurr); | 1627 | # Should not end with a space. |
1628 | $to =~ s/\s+$//; | ||
1629 | # '*'s should not have spaces between. | ||
1630 | while ($to =~ s/(.)\s\*/$1\*/) { | ||
1631 | } | ||
1628 | 1632 | ||
1629 | } elsif ($line =~ m{\b$NonptrType(\*+)(?:\s+(?:$Attribute|$Sparse))?\s+[A-Za-z\d_]+}) { | 1633 | #print "from<$from> to<$to>\n"; |
1630 | ERROR("\"foo$1 bar\" should be \"foo $1bar\"\n" . | 1634 | if ($from ne $to) { |
1631 | $herecurr); | 1635 | ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); |
1636 | } | ||
1637 | } elsif ($line =~ m{\b$NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)?)($Ident)}) { | ||
1638 | my ($from, $to, $ident) = ($1, $1, $2); | ||
1632 | 1639 | ||
1633 | } elsif ($line =~ m{\b$NonptrType\s+(\*+)(?!\s+(?:$Attribute|$Sparse))\s+[A-Za-z\d_]+}) { | 1640 | # Should start with a space. |
1634 | ERROR("\"foo $1 bar\" should be \"foo $1bar\"\n" . | 1641 | $to =~ s/^(\S)/ $1/; |
1635 | $herecurr); | 1642 | # Should not end with a space. |
1643 | $to =~ s/\s+$//; | ||
1644 | # '*'s should not have spaces between. | ||
1645 | while ($to =~ s/(.)\s\*/$1\*/) { | ||
1646 | } | ||
1647 | # Modifiers should have spaces. | ||
1648 | $to =~ s/(\b$Modifier$)/$1 /; | ||
1649 | |||
1650 | #print "from<$from> to<$to>\n"; | ||
1651 | if ($from ne $to) { | ||
1652 | ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); | ||
1653 | } | ||
1636 | } | 1654 | } |
1637 | 1655 | ||
1638 | # # no BUG() or BUG_ON() | 1656 | # # no BUG() or BUG_ON() |