Skip to content
Snippets Groups Projects
checkpatch.pl 30.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 				if ($lvl == 0 && scalar(@semi) < 2 &&
    
    				    $stmt !~ /{/ && $stmt !~ /\bif\b/ &&
    				    $before !~ /}/ && $after !~ /{/) {
    
    				    	my $herectx = "$here\n" . join("\n", @control, @block[1 .. $#block]) . "\n";
    				    	shift(@block);
    
    					WARN("braces {} are not necessary for single statement blocks\n" . $herectx);
    
    # don't include deprecated include files (uses RAW line)
    
    		for my $inc (@dep_includes) {
    
    			if ($rawline =~ m@\#\s*include\s*\<$inc>@) {
    
    				ERROR("Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n" . $herecurr);
    
    # don't use deprecated functions
    		for my $func (@dep_functions) {
    
    			if ($line =~ /\b$func\b/) {
    
    				ERROR("Don't use $func(): see Documentation/feature-removal-schedule.txt\n" . $herecurr);
    
    		if ($line =~ /\bvolatile\b/ && $line !~ /\basm\s+volatile\b/) {
    
    			WARN("Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
    
    # warn about #if 0
    		if ($line =~ /^.#\s*if\s+0\b/) {
    
    			CHK("if this code is redundant consider removing it\n" .
    				$herecurr);
    
    # check for needless kfree() checks
    		if ($prevline =~ /\bif\s*\(([^\)]*)\)/) {
    			my $expr = $1;
    			if ($line =~ /\bkfree\(\Q$expr\E\);/) {
    				WARN("kfree(NULL) is safe this check is probabally not required\n" . $hereprev);
    			}
    		}
    
    
    # warn about #ifdefs in C files
    #		if ($line =~ /^.#\s*if(|n)def/ && ($realfile =~ /\.c$/)) {
    #			print "#ifdef in C files should be avoided\n";
    #			print "$herecurr";
    #			$clean = 0;
    #		}
    
    
    # warn about spacing in #ifdefs
    		if ($line =~ /^.#\s*(ifdef|ifndef|elif)\s\s+/) {
    			ERROR("exactly one space required after that #$1\n" . $herecurr);
    		}
    
    
    # check for spinlock_t definitions without a comment.
    		if ($line =~ /^.\s*(struct\s+mutex|spinlock_t)\s+\S+;/) {
    			my $which = $1;
    			if (!ctx_has_comment($first_line, $linenr)) {
    
    				CHK("$1 definition without comment\n" . $herecurr);
    
    			}
    		}
    # check for memory barriers without a comment.
    		if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
    			if (!ctx_has_comment($first_line, $linenr)) {
    
    				CHK("memory barrier without comment\n" . $herecurr);
    
    			}
    		}
    # check of hardware specific defines
    
    		if ($line =~ m@^.#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) {
    
    			CHK("architecture specific defines should be avoided\n" .  $herecurr);
    
    # check the location of the inline attribute, that it is between
    # storage class and type.
    
    		if ($line =~ /$Type\s+(?:inline|__always_inline|noinline)\b/ ||
    		    $line =~ /\b(?:inline|__always_inline|noinline)\s+$Storage/) {
    
    			ERROR("inline keyword should sit between storage class and type\n" . $herecurr);
    		}
    
    # check for new externs in .c files.
    		if ($line =~ /^.\s*extern\s/ && ($realfile =~ /\.c$/)) {
    			WARN("externs should be avoided in .c files\n" .  $herecurr);
    		}
    
    # checks for new __setup's
    		if ($rawline =~ /\b__setup\("([^"]*)"/) {
    			my $name = $1;
    
    			if (!grep(/$name/, @setup_docs)) {
    				CHK("__setup appears un-documented -- check Documentation/kernel-parameters.txt\n" . $herecurr);
    			}
    
    	}
    
    	if ($chk_patch && !$is_patch) {
    
    		ERROR("Does not appear to be a unified-diff format patch\n");
    
    	}
    	if ($is_patch && $chk_signoff && $signoff == 0) {
    
    		ERROR("Missing Signed-off-by: line(s)\n");
    
    	if ($clean == 0 && ($chk_patch || $is_patch)) {
    		print report_dump();
    	}
    
    	if ($clean == 1 && $quiet == 0) {
    		print "Your patch has no obvious style problems and is ready for submission.\n"
    	}
    	if ($clean == 0 && $quiet == 0) {
    		print "Your patch has style problems, please review.  If any of these errors\n";
    		print "are false positives report them to the maintainer, see\n";
    		print "CHECKPATCH in MAINTAINERS.\n";
    	}
    	return $clean;
    }