On Thu, 2015-08-27 at 07:49 +0530, Viresh Kumar wrote:
> Few colleagues asked me why isn't checkpatch warning for (NULL == ptr)
> or (NULL != ptr) checks, as it warns for (ptr == NULL) and (ptr != NULL).
> 
> Did you miss it? or was it intentional ?

I didn't miss it.

NULL == foo is relatively unusual and not really worth the
bother.

And because most likely, "CONST test variable" checks like
        NULL != foo
and
        0 < bar

should probably be a separate test.

Something like:
---
 scripts/checkpatch.pl | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index e14dcdb..457ddef 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4231,6 +4231,29 @@ sub process {
                        }
                }
 
+# comparisons with a constant on the left
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ 
/\b($Constant|[A-Z_]+)\s*($Compare)\s*($LvalOrFunc)/) {
+                       my $const = $1;
+                       my $comp = $2;
+                       my $to = $3;
+                       my $newcomp = $comp;
+                       if (WARN("CONSTANT_COMPARISON",
+                                "Comparisons should place the constant on the 
right side of the test\n" . $herecurr) &&
+                           $fix) {
+                               if ($comp eq "<") {
+                                       $newcomp = ">=";
+                               } elsif ($comp eq "<=") {
+                                       $newcomp = ">";
+                               } elsif ($comp eq ">") {
+                                       $newcomp = "<=";
+                               } elsif ($comp eq ">=") {
+                                       $newcomp = "<";
+                               }
+                               $fixed[$fixlinenr] =~ 
s/\(\s*\Q$const\E\s*$Compare\s*\Q$to\E\s*\)/($to $newcomp $const)/;
+                       }
+               }
+
 # Return of what appears to be an errno should normally be negative
                if ($sline =~ 
/\breturn(?:\s*\(+\s*|\s+)(E[A-Z]+)(?:\s*\)+\s*|\s*)[;:,]/) {
                        my $name = $1;


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to