util/lint: Update checkpatch & files to upstream linux
- Update checkpatch.pl to version 522b837 (checkpatch: warn when formats use %Z and suggest %z) - This update moves the const_struct definitions into an external file. coreboot will want to update this file, but for now I'm just pulling it in directly from the linux tree. - Update spelling.txt used by checkpatch.pl to version 505d308 (scripts/spelling.txt: add "overide" pattern and fix typo instances) - Add better notes where things have been changed for coreboot to make future merges easier. Change-Id: I0ef067874fe7b1d23276a10e63858895d6083f69 Signed-off-by: Martin Roth <martinroth@google.com> Reviewed-on: https://review.coreboot.org/18810 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
96b89ae5eb
commit
edd591d8ca
|
@ -38,14 +38,14 @@ my $show_types = 0;
|
||||||
my $list_types = 0;
|
my $list_types = 0;
|
||||||
my $fix = 0;
|
my $fix = 0;
|
||||||
my $fix_inplace = 0;
|
my $fix_inplace = 0;
|
||||||
my $root;
|
my $root = $P; #coreboot
|
||||||
my %debug;
|
my %debug;
|
||||||
my %camelcase = ();
|
my %camelcase = ();
|
||||||
my %use_type = ();
|
my %use_type = ();
|
||||||
my @use = ();
|
my @use = ();
|
||||||
my %ignore_type = ();
|
my %ignore_type = ();
|
||||||
my @ignore = ();
|
my @ignore = ();
|
||||||
my @exclude = ();
|
my @exclude = (); #coreboot
|
||||||
my $help = 0;
|
my $help = 0;
|
||||||
my $configuration_file = ".checkpatch.conf";
|
my $configuration_file = ".checkpatch.conf";
|
||||||
my $max_line_length = 80;
|
my $max_line_length = 80;
|
||||||
|
@ -55,7 +55,9 @@ my $min_conf_desc_length = 4;
|
||||||
my $spelling_file = "$D/spelling.txt";
|
my $spelling_file = "$D/spelling.txt";
|
||||||
my $codespell = 0;
|
my $codespell = 0;
|
||||||
my $codespellfile = "/usr/share/codespell/dictionary.txt";
|
my $codespellfile = "/usr/share/codespell/dictionary.txt";
|
||||||
|
my $conststructsfile = "$D/const_structs.checkpatch";
|
||||||
my $color = 1;
|
my $color = 1;
|
||||||
|
my $allow_c99_comments = 1;
|
||||||
|
|
||||||
sub help {
|
sub help {
|
||||||
my ($exitcode) = @_;
|
my ($exitcode) = @_;
|
||||||
|
@ -192,7 +194,7 @@ GetOptions(
|
||||||
'subjective!' => \$check,
|
'subjective!' => \$check,
|
||||||
'strict!' => \$check,
|
'strict!' => \$check,
|
||||||
'ignore=s' => \@ignore,
|
'ignore=s' => \@ignore,
|
||||||
'exclude=s' => \@exclude,
|
'exclude=s' => \@exclude, #coreboot
|
||||||
'types=s' => \@use,
|
'types=s' => \@use,
|
||||||
'show-types!' => \$show_types,
|
'show-types!' => \$show_types,
|
||||||
'list-types!' => \$list_types,
|
'list-types!' => \$list_types,
|
||||||
|
@ -230,9 +232,9 @@ if ($^V && $^V lt $minimum_perl_version) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if no filenames are given, push '-' to read patch from stdin
|
||||||
if ($#ARGV < 0) {
|
if ($#ARGV < 0) {
|
||||||
print "$P: no input files\n";
|
push(@ARGV, '-');
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub hash_save_array_words {
|
sub hash_save_array_words {
|
||||||
|
@ -316,7 +318,6 @@ our $Sparse = qr{
|
||||||
__kernel|
|
__kernel|
|
||||||
__force|
|
__force|
|
||||||
__iomem|
|
__iomem|
|
||||||
__pmem|
|
|
||||||
__must_check|
|
__must_check|
|
||||||
__init_refok|
|
__init_refok|
|
||||||
__kprobes|
|
__kprobes|
|
||||||
|
@ -337,7 +338,7 @@ our $Attribute = qr{
|
||||||
__percpu|
|
__percpu|
|
||||||
__nocast|
|
__nocast|
|
||||||
__safe|
|
__safe|
|
||||||
__bitwise__|
|
__bitwise|
|
||||||
__packed__|
|
__packed__|
|
||||||
__packed2__|
|
__packed2__|
|
||||||
__naked|
|
__naked|
|
||||||
|
@ -426,7 +427,7 @@ our $typeTypedefs = qr{(?x:
|
||||||
our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
|
our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
|
||||||
|
|
||||||
our $logFunctions = qr{(?x:
|
our $logFunctions = qr{(?x:
|
||||||
printk(?:_ratelimited|_once|)|
|
printk(?:_ratelimited|_once|_deferred_once|_deferred|)|
|
||||||
(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
|
(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
|
||||||
WARN(?:_RATELIMIT|_ONCE|)|
|
WARN(?:_RATELIMIT|_ONCE|)|
|
||||||
panic|
|
panic|
|
||||||
|
@ -526,7 +527,11 @@ our @mode_permission_funcs = (
|
||||||
["module_param_array_named", 5],
|
["module_param_array_named", 5],
|
||||||
["debugfs_create_(?:file|u8|u16|u32|u64|x8|x16|x32|x64|size_t|atomic_t|bool|blob|regset32|u32_array)", 2],
|
["debugfs_create_(?:file|u8|u16|u32|u64|x8|x16|x32|x64|size_t|atomic_t|bool|blob|regset32|u32_array)", 2],
|
||||||
["proc_create(?:_data|)", 2],
|
["proc_create(?:_data|)", 2],
|
||||||
["(?:CLASS|DEVICE|SENSOR)_ATTR", 2],
|
["(?:CLASS|DEVICE|SENSOR|SENSOR_DEVICE|IIO_DEVICE)_ATTR", 2],
|
||||||
|
["IIO_DEV_ATTR_[A-Z_]+", 1],
|
||||||
|
["SENSOR_(?:DEVICE_|)ATTR_2", 2],
|
||||||
|
["SENSOR_TEMPLATE(?:_2|)", 3],
|
||||||
|
["__ATTR", 2],
|
||||||
);
|
);
|
||||||
|
|
||||||
#Create a search pattern for all these functions to speed up a loop below
|
#Create a search pattern for all these functions to speed up a loop below
|
||||||
|
@ -544,6 +549,32 @@ our $mode_perms_world_writable = qr{
|
||||||
0[0-7][0-7][2367]
|
0[0-7][0-7][2367]
|
||||||
}x;
|
}x;
|
||||||
|
|
||||||
|
our %mode_permission_string_types = (
|
||||||
|
"S_IRWXU" => 0700,
|
||||||
|
"S_IRUSR" => 0400,
|
||||||
|
"S_IWUSR" => 0200,
|
||||||
|
"S_IXUSR" => 0100,
|
||||||
|
"S_IRWXG" => 0070,
|
||||||
|
"S_IRGRP" => 0040,
|
||||||
|
"S_IWGRP" => 0020,
|
||||||
|
"S_IXGRP" => 0010,
|
||||||
|
"S_IRWXO" => 0007,
|
||||||
|
"S_IROTH" => 0004,
|
||||||
|
"S_IWOTH" => 0002,
|
||||||
|
"S_IXOTH" => 0001,
|
||||||
|
"S_IRWXUGO" => 0777,
|
||||||
|
"S_IRUGO" => 0444,
|
||||||
|
"S_IWUGO" => 0222,
|
||||||
|
"S_IXUGO" => 0111,
|
||||||
|
);
|
||||||
|
|
||||||
|
#Create a search pattern for all these strings to speed up a loop below
|
||||||
|
our $mode_perms_string_search = "";
|
||||||
|
foreach my $entry (keys %mode_permission_string_types) {
|
||||||
|
$mode_perms_string_search .= '|' if ($mode_perms_string_search ne "");
|
||||||
|
$mode_perms_string_search .= $entry;
|
||||||
|
}
|
||||||
|
|
||||||
our $allowed_asm_includes = qr{(?x:
|
our $allowed_asm_includes = qr{(?x:
|
||||||
irq|
|
irq|
|
||||||
memory|
|
memory|
|
||||||
|
@ -601,6 +632,29 @@ if ($codespell) {
|
||||||
|
|
||||||
$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
||||||
|
|
||||||
|
my $const_structs = "";
|
||||||
|
if (open(my $conststructs, '<', $conststructsfile)) {
|
||||||
|
while (<$conststructs>) {
|
||||||
|
my $line = $_;
|
||||||
|
|
||||||
|
$line =~ s/\s*\n?$//g;
|
||||||
|
$line =~ s/^\s*//g;
|
||||||
|
|
||||||
|
next if ($line =~ m/^\s*#/);
|
||||||
|
next if ($line =~ m/^\s*$/);
|
||||||
|
if ($line =~ /\s/) {
|
||||||
|
print("$conststructsfile: '$line' invalid - ignored\n");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$const_structs .= '|' if ($const_structs ne "");
|
||||||
|
$const_structs .= $line;
|
||||||
|
}
|
||||||
|
close($conststructsfile);
|
||||||
|
} else {
|
||||||
|
warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
|
||||||
|
}
|
||||||
|
|
||||||
sub build_types {
|
sub build_types {
|
||||||
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
|
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
|
||||||
my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
|
my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
|
||||||
|
@ -707,6 +761,16 @@ sub seed_camelcase_file {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub is_maintained_obsolete {
|
||||||
|
my ($filename) = @_;
|
||||||
|
|
||||||
|
return 0 if (!$tree || !(-e "$root/scripts/get_maintainer.pl"));
|
||||||
|
|
||||||
|
my $status = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
|
||||||
|
|
||||||
|
return $status =~ /obsolete/i;
|
||||||
|
}
|
||||||
|
|
||||||
my $camelcase_seeded = 0;
|
my $camelcase_seeded = 0;
|
||||||
sub seed_camelcase_includes {
|
sub seed_camelcase_includes {
|
||||||
return if ($camelcase_seeded);
|
return if ($camelcase_seeded);
|
||||||
|
@ -1148,6 +1212,11 @@ sub sanitise_line {
|
||||||
$res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@;
|
$res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($allow_c99_comments && $res =~ m@(//.*$)@) {
|
||||||
|
my $match = $1;
|
||||||
|
$res =~ s/\Q$match\E/"$;" x length($match)/e;
|
||||||
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1788,6 +1857,8 @@ my $prefix = '';
|
||||||
sub show_type {
|
sub show_type {
|
||||||
my ($type) = @_;
|
my ($type) = @_;
|
||||||
|
|
||||||
|
$type =~ tr/[a-z]/[A-Z]/;
|
||||||
|
|
||||||
return defined $use_type{$type} if (scalar keys %use_type > 0);
|
return defined $use_type{$type} if (scalar keys %use_type > 0);
|
||||||
|
|
||||||
return !defined $ignore_type{$type};
|
return !defined $ignore_type{$type};
|
||||||
|
@ -2073,6 +2144,7 @@ sub process {
|
||||||
my $is_patch = 0;
|
my $is_patch = 0;
|
||||||
my $in_header_lines = $file ? 0 : 1;
|
my $in_header_lines = $file ? 0 : 1;
|
||||||
my $in_commit_log = 0; #Scanning lines before patch
|
my $in_commit_log = 0; #Scanning lines before patch
|
||||||
|
my $has_commit_log = 0; #Encountered lines before patch
|
||||||
my $commit_log_possible_stack_dump = 0;
|
my $commit_log_possible_stack_dump = 0;
|
||||||
my $commit_log_long_line = 0;
|
my $commit_log_long_line = 0;
|
||||||
my $commit_log_has_diff = 0;
|
my $commit_log_has_diff = 0;
|
||||||
|
@ -2093,6 +2165,7 @@ sub process {
|
||||||
my $realline = 0;
|
my $realline = 0;
|
||||||
my $realcnt = 0;
|
my $realcnt = 0;
|
||||||
my $here = '';
|
my $here = '';
|
||||||
|
my $context_function; #undef'd unless there's a known function
|
||||||
my $in_comment = 0;
|
my $in_comment = 0;
|
||||||
my $comment_edge = 0;
|
my $comment_edge = 0;
|
||||||
my $first_line = 0;
|
my $first_line = 0;
|
||||||
|
@ -2126,12 +2199,13 @@ sub process {
|
||||||
|
|
||||||
if ($rawline=~/^\+\+\+\s+(\S+)/) {
|
if ($rawline=~/^\+\+\+\s+(\S+)/) {
|
||||||
$setup_docs = 0;
|
$setup_docs = 0;
|
||||||
if ($1 =~ m@Documentation/kernel-parameters.txt$@) {
|
if ($1 =~ m@Documentation/admin-guide/kernel-parameters.rst$@) {
|
||||||
$setup_docs = 1;
|
$setup_docs = 1;
|
||||||
}
|
}
|
||||||
#next;
|
#next;
|
||||||
}
|
}
|
||||||
if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
|
if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@(.*)/) {
|
||||||
|
my $context = $4;
|
||||||
$realline=$1-1;
|
$realline=$1-1;
|
||||||
if (defined $2) {
|
if (defined $2) {
|
||||||
$realcnt=$3+1;
|
$realcnt=$3+1;
|
||||||
|
@ -2140,6 +2214,12 @@ sub process {
|
||||||
}
|
}
|
||||||
$in_comment = 0;
|
$in_comment = 0;
|
||||||
|
|
||||||
|
if ($context =~ /\b(\w+)\s*\(/) {
|
||||||
|
$context_function = $1;
|
||||||
|
} else {
|
||||||
|
undef $context_function;
|
||||||
|
}
|
||||||
|
|
||||||
# Guestimate if this is a continuing comment. Run
|
# Guestimate if this is a continuing comment. Run
|
||||||
# the context looking for a comment "edge". If this
|
# the context looking for a comment "edge". If this
|
||||||
# edge is a close comment then we must be in a comment
|
# edge is a close comment then we must be in a comment
|
||||||
|
@ -2280,6 +2360,7 @@ sub process {
|
||||||
$found_file = 1;
|
$found_file = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# coreboot
|
||||||
my $skipme = 0;
|
my $skipme = 0;
|
||||||
foreach (@exclude) {
|
foreach (@exclude) {
|
||||||
if ($realfile =~ m@^(?:$_/)@) {
|
if ($realfile =~ m@^(?:$_/)@) {
|
||||||
|
@ -2302,6 +2383,10 @@ sub process {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($found_file) {
|
if ($found_file) {
|
||||||
|
if (is_maintained_obsolete($realfile)) {
|
||||||
|
WARN("OBSOLETE",
|
||||||
|
"$realfile is marked as 'obsolete' in the MAINTAINERS hierarchy. No unnecessary modifications please.\n");
|
||||||
|
}
|
||||||
if ($realfile =~ m@^(?:drivers/net/|net/|drivers/staging/)@) {
|
if ($realfile =~ m@^(?:drivers/net/|net/|drivers/staging/)@) {
|
||||||
$check = 1;
|
$check = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2473,8 +2558,9 @@ sub process {
|
||||||
|
|
||||||
# Check for git id commit length and improperly formed commit descriptions
|
# Check for git id commit length and improperly formed commit descriptions
|
||||||
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
||||||
|
$line !~ /^\s*(?:Link|Patchwork|http|https|BugLink):/i &&
|
||||||
($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
|
($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
|
||||||
($line =~ /\b[0-9a-f]{12,40}\b/i &&
|
($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i &&
|
||||||
$line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i &&
|
$line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i &&
|
||||||
$line !~ /\bfixes:\s*[0-9a-f]{12,40}/i))) {
|
$line !~ /\bfixes:\s*[0-9a-f]{12,40}/i))) {
|
||||||
my $init_char = "c";
|
my $init_char = "c";
|
||||||
|
@ -2533,6 +2619,7 @@ sub process {
|
||||||
$line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
|
$line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
|
||||||
($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
|
($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
|
||||||
(defined($1) || defined($2))))) {
|
(defined($1) || defined($2))))) {
|
||||||
|
$is_patch = 1;
|
||||||
$reported_maintainer_file = 1;
|
$reported_maintainer_file = 1;
|
||||||
WARN("FILE_PATH_CHANGES",
|
WARN("FILE_PATH_CHANGES",
|
||||||
"added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
|
"added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
|
||||||
|
@ -2545,20 +2632,6 @@ sub process {
|
||||||
$herecurr) if (!$emitted_corrupt++);
|
$herecurr) if (!$emitted_corrupt++);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for absolute kernel paths.
|
|
||||||
if ($tree) {
|
|
||||||
while ($line =~ m{(?:^|\s)(/\S*)}g) {
|
|
||||||
my $file = $1;
|
|
||||||
|
|
||||||
if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
|
|
||||||
check_absolute_file($1, $herecurr)) {
|
|
||||||
#
|
|
||||||
} else {
|
|
||||||
check_absolute_file($file, $herecurr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
|
# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
|
||||||
if (($realfile =~ /^$/ || $line =~ /^\+/) &&
|
if (($realfile =~ /^$/ || $line =~ /^\+/) &&
|
||||||
$rawline !~ m/^$UTF8*$/) {
|
$rawline !~ m/^$UTF8*$/) {
|
||||||
|
@ -2579,6 +2652,7 @@ sub process {
|
||||||
$rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
|
$rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
|
||||||
$in_header_lines = 0;
|
$in_header_lines = 0;
|
||||||
$in_commit_log = 1;
|
$in_commit_log = 1;
|
||||||
|
$has_commit_log = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if there is UTF-8 in a commit log when a mail header has explicitly
|
# Check if there is UTF-8 in a commit log when a mail header has explicitly
|
||||||
|
@ -2595,6 +2669,20 @@ sub process {
|
||||||
"8-bit UTF-8 used in possible commit log\n" . $herecurr);
|
"8-bit UTF-8 used in possible commit log\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check for absolute kernel paths in commit message
|
||||||
|
if ($tree && $in_commit_log) {
|
||||||
|
while ($line =~ m{(?:^|\s)(/\S*)}g) {
|
||||||
|
my $file = $1;
|
||||||
|
|
||||||
|
if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
|
||||||
|
check_absolute_file($1, $herecurr)) {
|
||||||
|
#
|
||||||
|
} else {
|
||||||
|
check_absolute_file($file, $herecurr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Check for various typo / spelling mistakes
|
# Check for various typo / spelling mistakes
|
||||||
if (defined($misspellings) &&
|
if (defined($misspellings) &&
|
||||||
($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
|
($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
|
||||||
|
@ -2637,6 +2725,7 @@ sub process {
|
||||||
|
|
||||||
# Check for FSF mailing addresses.
|
# Check for FSF mailing addresses.
|
||||||
if ($rawline =~ /\bwrite to the Free/i ||
|
if ($rawline =~ /\bwrite to the Free/i ||
|
||||||
|
$rawline =~ /\b675\s+Mass\s+Ave/i ||
|
||||||
$rawline =~ /\b59\s+Temple\s+Pl/i ||
|
$rawline =~ /\b59\s+Temple\s+Pl/i ||
|
||||||
$rawline =~ /\b51\s+Franklin\s+St/i) {
|
$rawline =~ /\b51\s+Franklin\s+St/i) {
|
||||||
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
|
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
|
||||||
|
@ -2748,7 +2837,7 @@ sub process {
|
||||||
}
|
}
|
||||||
|
|
||||||
# check we are in a valid source file if not then ignore this hunk
|
# check we are in a valid source file if not then ignore this hunk
|
||||||
next if ($realfile !~ /\.(h|c|s|S|pl|sh|dtsi|dts)$/);
|
next if ($realfile !~ /\.(h|c|s|S|sh|dtsi|dts)$/);
|
||||||
|
|
||||||
# line length limit (with some exclusions)
|
# line length limit (with some exclusions)
|
||||||
#
|
#
|
||||||
|
@ -2782,6 +2871,10 @@ sub process {
|
||||||
$line =~ /^\+\s*#\s*define\s+\w+\s+$String$/) {
|
$line =~ /^\+\s*#\s*define\s+\w+\s+$String$/) {
|
||||||
$msg_type = "";
|
$msg_type = "";
|
||||||
|
|
||||||
|
# EFI_GUID is another special case
|
||||||
|
} elsif ($line =~ /^\+.*\bEFI_GUID\s*\(/) {
|
||||||
|
$msg_type = "";
|
||||||
|
|
||||||
# Otherwise set the alternate message types
|
# Otherwise set the alternate message types
|
||||||
|
|
||||||
# a comment starts before $max_line_length
|
# a comment starts before $max_line_length
|
||||||
|
@ -2946,6 +3039,30 @@ sub process {
|
||||||
"Block comments use a trailing */ on a separate line\n" . $herecurr);
|
"Block comments use a trailing */ on a separate line\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Block comment * alignment
|
||||||
|
if ($prevline =~ /$;[ \t]*$/ && #ends in comment
|
||||||
|
$line =~ /^\+[ \t]*$;/ && #leading comment
|
||||||
|
$rawline =~ /^\+[ \t]*\*/ && #leading *
|
||||||
|
(($prevrawline =~ /^\+.*?\/\*/ && #leading /*
|
||||||
|
$prevrawline !~ /\*\/[ \t]*$/) || #no trailing */
|
||||||
|
$prevrawline =~ /^\+[ \t]*\*/)) { #leading *
|
||||||
|
my $oldindent;
|
||||||
|
$prevrawline =~ m@^\+([ \t]*/?)\*@;
|
||||||
|
if (defined($1)) {
|
||||||
|
$oldindent = expand_tabs($1);
|
||||||
|
} else {
|
||||||
|
$prevrawline =~ m@^\+(.*/?)\*@;
|
||||||
|
$oldindent = expand_tabs($1);
|
||||||
|
}
|
||||||
|
$rawline =~ m@^\+([ \t]*)\*@;
|
||||||
|
my $newindent = $1;
|
||||||
|
$newindent = expand_tabs($newindent);
|
||||||
|
if (length($oldindent) ne length($newindent)) {
|
||||||
|
WARN("BLOCK_COMMENT_STYLE",
|
||||||
|
"Block comments should align the * on each line\n" . $hereprev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# check for missing blank lines after struct/union declarations
|
# check for missing blank lines after struct/union declarations
|
||||||
# with exceptions for various attributes and macros
|
# with exceptions for various attributes and macros
|
||||||
if ($prevline =~ /^[\+ ]};?\s*$/ &&
|
if ($prevline =~ /^[\+ ]};?\s*$/ &&
|
||||||
|
@ -3355,8 +3472,20 @@ sub process {
|
||||||
#ignore lines not being added
|
#ignore lines not being added
|
||||||
next if ($line =~ /^[^\+]/);
|
next if ($line =~ /^[^\+]/);
|
||||||
|
|
||||||
|
# check for dereferences that span multiple lines
|
||||||
|
if ($prevline =~ /^\+.*$Lval\s*(?:\.|->)\s*$/ &&
|
||||||
|
$line =~ /^\+\s*(?!\#\s*(?!define\s+|if))\s*$Lval/) {
|
||||||
|
$prevline =~ /($Lval\s*(?:\.|->))\s*$/;
|
||||||
|
my $ref = $1;
|
||||||
|
$line =~ /^.\s*($Lval)/;
|
||||||
|
$ref .= $1;
|
||||||
|
$ref =~ s/\s//g;
|
||||||
|
WARN("MULTILINE_DEREFERENCE",
|
||||||
|
"Avoid multiple line dereference - prefer '$ref'\n" . $hereprev);
|
||||||
|
}
|
||||||
|
|
||||||
# check for declarations of signed or unsigned without int
|
# check for declarations of signed or unsigned without int
|
||||||
while ($line =~ m{($Declare)\s*(?!char\b|short\b|int\b|long\b)\s*($Ident)?\s*[=,;\[\)\(]}g) {
|
while ($line =~ m{\b($Declare)\s*(?!char\b|short\b|int\b|long\b)\s*($Ident)?\s*[=,;\[\)\(]}g) {
|
||||||
my $type = $1;
|
my $type = $1;
|
||||||
my $var = $2;
|
my $var = $2;
|
||||||
$var = "" if (!defined $var);
|
$var = "" if (!defined $var);
|
||||||
|
@ -3577,22 +3706,13 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for uses of DEFINE_PCI_DEVICE_TABLE
|
|
||||||
if ($line =~ /\bDEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=/) {
|
|
||||||
if (WARN("DEFINE_PCI_DEVICE_TABLE",
|
|
||||||
"Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) &&
|
|
||||||
$fix) {
|
|
||||||
$fixed[$fixlinenr] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# check for new typedefs, only function parameters and sparse annotations
|
# check for new typedefs, only function parameters and sparse annotations
|
||||||
# make sense.
|
# make sense.
|
||||||
if ($line =~ /\btypedef\s/ &&
|
if ($line =~ /\btypedef\s/ &&
|
||||||
$line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
|
$line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
|
||||||
$line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
|
$line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
|
||||||
$line !~ /\b$typeTypedefs\b/ &&
|
$line !~ /\b$typeTypedefs\b/ &&
|
||||||
$line !~ /\b__bitwise(?:__|)\b/) {
|
$line !~ /\b__bitwise\b/) {
|
||||||
WARN("NEW_TYPEDEFS",
|
WARN("NEW_TYPEDEFS",
|
||||||
"do not add new typedefs\n" . $herecurr);
|
"do not add new typedefs\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
@ -3736,6 +3856,7 @@ sub process {
|
||||||
# function brace can't be on same line, except for #defines of do while,
|
# function brace can't be on same line, except for #defines of do while,
|
||||||
# or if closed on same line
|
# or if closed on same line
|
||||||
if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and
|
if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and
|
||||||
|
#coreboot - Ignore struct lines with attributes - they're not functions
|
||||||
($line!~/struct.*__attribute__\(\(.*\)\)/) and
|
($line!~/struct.*__attribute__\(\(.*\)\)/) and
|
||||||
!($line=~/\#\s*define.*do\s\{/) and !($line=~/}/)) {
|
!($line=~/\#\s*define.*do\s\{/) and !($line=~/}/)) {
|
||||||
if (ERROR("OPEN_BRACE",
|
if (ERROR("OPEN_BRACE",
|
||||||
|
@ -3856,12 +3977,12 @@ sub process {
|
||||||
# 1. with a type on the left -- int [] a;
|
# 1. with a type on the left -- int [] a;
|
||||||
# 2. at the beginning of a line for slice initialisers -- [0...10] = 5,
|
# 2. at the beginning of a line for slice initialisers -- [0...10] = 5,
|
||||||
# 3. inside a curly brace -- = { [0...10] = 5 }
|
# 3. inside a curly brace -- = { [0...10] = 5 }
|
||||||
# 4. in an extended asm instruction -- : [r0]"r"(r0)
|
# 4. in an extended asm instruction -- : [r0]"r"(r0) (coreboot)
|
||||||
while ($line =~ /(.*?\s)\[/g) {
|
while ($line =~ /(.*?\s)\[/g) {
|
||||||
my ($where, $prefix) = ($-[1], $1);
|
my ($where, $prefix) = ($-[1], $1);
|
||||||
if ($prefix !~ /$Type\s+$/ &&
|
if ($prefix !~ /$Type\s+$/ &&
|
||||||
($where != 0 || $prefix !~ /^.\s+$/) &&
|
($where != 0 || $prefix !~ /^.\s+$/) &&
|
||||||
$prefix !~ /[{,:]\s+$/) {
|
$prefix !~ /[{,:]\s+$/) { #coreboot
|
||||||
if (ERROR("BRACKET_SPACE",
|
if (ERROR("BRACKET_SPACE",
|
||||||
"space prohibited before open square bracket '['\n" . $herecurr) &&
|
"space prohibited before open square bracket '['\n" . $herecurr) &&
|
||||||
$fix) {
|
$fix) {
|
||||||
|
@ -4683,7 +4804,17 @@ sub process {
|
||||||
$has_flow_statement = 1 if ($ctx =~ /\b(goto|return)\b/);
|
$has_flow_statement = 1 if ($ctx =~ /\b(goto|return)\b/);
|
||||||
$has_arg_concat = 1 if ($ctx =~ /\#\#/ && $ctx !~ /\#\#\s*(?:__VA_ARGS__|args)\b/);
|
$has_arg_concat = 1 if ($ctx =~ /\#\#/ && $ctx !~ /\#\#\s*(?:__VA_ARGS__|args)\b/);
|
||||||
|
|
||||||
$dstat =~ s/^.\s*\#\s*define\s+$Ident(?:\([^\)]*\))?\s*//;
|
$dstat =~ s/^.\s*\#\s*define\s+$Ident(\([^\)]*\))?\s*//;
|
||||||
|
my $define_args = $1;
|
||||||
|
my $define_stmt = $dstat;
|
||||||
|
my @def_args = ();
|
||||||
|
|
||||||
|
if (defined $define_args && $define_args ne "") {
|
||||||
|
$define_args = substr($define_args, 1, length($define_args) - 2);
|
||||||
|
$define_args =~ s/\s*//g;
|
||||||
|
@def_args = split(",", $define_args);
|
||||||
|
}
|
||||||
|
|
||||||
$dstat =~ s/$;//g;
|
$dstat =~ s/$;//g;
|
||||||
$dstat =~ s/\\\n.//g;
|
$dstat =~ s/\\\n.//g;
|
||||||
$dstat =~ s/^\s*//s;
|
$dstat =~ s/^\s*//s;
|
||||||
|
@ -4719,6 +4850,15 @@ sub process {
|
||||||
^\[
|
^\[
|
||||||
}x;
|
}x;
|
||||||
#print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
|
#print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
|
||||||
|
|
||||||
|
$ctx =~ s/\n*$//;
|
||||||
|
my $herectx = $here . "\n";
|
||||||
|
my $stmt_cnt = statement_rawlines($ctx);
|
||||||
|
|
||||||
|
for (my $n = 0; $n < $stmt_cnt; $n++) {
|
||||||
|
$herectx .= raw_line($linenr, $n) . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
if ($dstat ne '' &&
|
if ($dstat ne '' &&
|
||||||
$dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(),
|
$dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(),
|
||||||
$dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo();
|
$dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo();
|
||||||
|
@ -4730,17 +4870,10 @@ sub process {
|
||||||
$dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ && # do {...} while (...); // do {...} while (...)
|
$dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ && # do {...} while (...); // do {...} while (...)
|
||||||
$dstat !~ /^for\s*$Constant$/ && # for (...)
|
$dstat !~ /^for\s*$Constant$/ && # for (...)
|
||||||
$dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ && # for (...) bar()
|
$dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ && # for (...) bar()
|
||||||
$dstat !~ /^do\s*\{/ && # do {...
|
$dstat !~ /^do\s*{/ && # do {...
|
||||||
$dstat !~ /^\(\{/ && # ({...
|
$dstat !~ /^\(\{/ && # ({...
|
||||||
$ctx !~ /^.\s*#\s*define\s+TRACE_(?:SYSTEM|INCLUDE_FILE|INCLUDE_PATH)\b/)
|
$ctx !~ /^.\s*#\s*define\s+TRACE_(?:SYSTEM|INCLUDE_FILE|INCLUDE_PATH)\b/)
|
||||||
{
|
{
|
||||||
$ctx =~ s/\n*$//;
|
|
||||||
my $herectx = $here . "\n";
|
|
||||||
my $cnt = statement_rawlines($ctx);
|
|
||||||
|
|
||||||
for (my $n = 0; $n < $cnt; $n++) {
|
|
||||||
$herectx .= raw_line($linenr, $n) . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($dstat =~ /;/) {
|
if ($dstat =~ /;/) {
|
||||||
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
|
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
|
||||||
|
@ -4749,6 +4882,46 @@ sub process {
|
||||||
ERROR("COMPLEX_MACRO",
|
ERROR("COMPLEX_MACRO",
|
||||||
"Macros with complex values should be enclosed in parentheses\n" . "$herectx");
|
"Macros with complex values should be enclosed in parentheses\n" . "$herectx");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make $define_stmt single line, comment-free, etc
|
||||||
|
my @stmt_array = split('\n', $define_stmt);
|
||||||
|
my $first = 1;
|
||||||
|
$define_stmt = "";
|
||||||
|
foreach my $l (@stmt_array) {
|
||||||
|
$l =~ s/\\$//;
|
||||||
|
if ($first) {
|
||||||
|
$define_stmt = $l;
|
||||||
|
$first = 0;
|
||||||
|
} elsif ($l =~ /^[\+ ]/) {
|
||||||
|
$define_stmt .= substr($l, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$define_stmt =~ s/$;//g;
|
||||||
|
$define_stmt =~ s/\s+/ /g;
|
||||||
|
$define_stmt = trim($define_stmt);
|
||||||
|
|
||||||
|
# check if any macro arguments are reused (ignore '...' and 'type')
|
||||||
|
foreach my $arg (@def_args) {
|
||||||
|
next if ($arg =~ /\.\.\./);
|
||||||
|
next if ($arg =~ /^type$/i);
|
||||||
|
my $tmp = $define_stmt;
|
||||||
|
$tmp =~ s/\b(typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
|
||||||
|
$tmp =~ s/\#+\s*$arg\b//g;
|
||||||
|
$tmp =~ s/\b$arg\s*\#\#//g;
|
||||||
|
my $use_cnt = $tmp =~ s/\b$arg\b//g;
|
||||||
|
if ($use_cnt > 1) {
|
||||||
|
CHK("MACRO_ARG_REUSE",
|
||||||
|
"Macro argument reuse '$arg' - possible side-effects?\n" . "$herectx");
|
||||||
|
}
|
||||||
|
# check if any macro arguments may have other precedence issues
|
||||||
|
if ($define_stmt =~ m/($Operators)?\s*\b$arg\b\s*($Operators)?/m &&
|
||||||
|
((defined($1) && $1 ne ',') ||
|
||||||
|
(defined($2) && $2 ne ','))) {
|
||||||
|
CHK("MACRO_ARG_PRECEDENCE",
|
||||||
|
"Macro argument '$arg' may be better as '($arg)' to avoid precedence issues\n" . "$herectx");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for macros with flow control, but without ## concatenation
|
# check for macros with flow control, but without ## concatenation
|
||||||
|
@ -4956,6 +5129,12 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for single line unbalanced braces
|
||||||
|
if ($sline =~ /^.\s*\}\s*else\s*$/ ||
|
||||||
|
$sline =~ /^.\s*else\s*\{\s*$/) {
|
||||||
|
CHK("BRACES", "Unbalanced braces around else statement\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
# check for unnecessary blank lines around braces
|
# check for unnecessary blank lines around braces
|
||||||
if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) {
|
if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) {
|
||||||
if (CHK("BRACES",
|
if (CHK("BRACES",
|
||||||
|
@ -4976,7 +5155,7 @@ sub process {
|
||||||
my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
|
my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
|
||||||
if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
|
if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
|
||||||
WARN("VOLATILE",
|
WARN("VOLATILE",
|
||||||
"Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
|
"Use of volatile is usually wrong: see Documentation/process/volatile-considered-harmful.rst\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for user-visible strings broken across lines, which breaks the ability
|
# Check for user-visible strings broken across lines, which breaks the ability
|
||||||
|
@ -5018,6 +5197,16 @@ sub process {
|
||||||
"break quoted strings at a space character\n" . $hereprev);
|
"break quoted strings at a space character\n" . $hereprev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#check for an embedded function name in a string when the function is known
|
||||||
|
# as part of a diff. This does not work for -f --file checking as it
|
||||||
|
#depends on patch context providing the function name
|
||||||
|
if ($line =~ /^\+.*$String/ &&
|
||||||
|
defined($context_function) &&
|
||||||
|
get_quoted_string($line, $rawline) =~ /\b$context_function\b/) {
|
||||||
|
WARN("EMBEDDED_FUNCTION_NAME",
|
||||||
|
"Prefer using \"%s\", __func__ to embedded function names\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
# check for spaces before a quoted newline
|
# check for spaces before a quoted newline
|
||||||
if ($rawline =~ /^.*\".*\s\\n/) {
|
if ($rawline =~ /^.*\".*\s\\n/) {
|
||||||
if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
|
if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
|
||||||
|
@ -5040,18 +5229,27 @@ sub process {
|
||||||
"Consecutive strings are generally better as a single string\n" . $herecurr);
|
"Consecutive strings are generally better as a single string\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for %L{u,d,i} and 0x%[udi] in strings
|
# check for non-standard and hex prefixed decimal printf formats
|
||||||
my $string;
|
my $show_L = 1; #don't show the same defect twice
|
||||||
|
my $show_Z = 1;
|
||||||
while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
|
while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
|
||||||
$string = substr($rawline, $-[1], $+[1] - $-[1]);
|
my $string = substr($rawline, $-[1], $+[1] - $-[1]);
|
||||||
$string =~ s/%%/__/g;
|
$string =~ s/%%/__/g;
|
||||||
if ($string =~ /(?<!%)%[\*\d\.\$]*L[udi]/) {
|
# check for %L
|
||||||
|
if ($show_L && $string =~ /%[\*\d\.\$]*L([diouxX])/) {
|
||||||
WARN("PRINTF_L",
|
WARN("PRINTF_L",
|
||||||
"\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
|
"\%L$1 is non-standard C, use %ll$1\n" . $herecurr);
|
||||||
last;
|
$show_L = 0;
|
||||||
}
|
}
|
||||||
if ($string =~ /0x%[\*\d\.\$\Llzth]*[udi]/) {
|
# check for %Z
|
||||||
ERROR("PRINTF_0xDECIMAL",
|
if ($show_Z && $string =~ /%[\*\d\.\$]*Z([diouxX])/) {
|
||||||
|
WARN("PRINTF_Z",
|
||||||
|
"%Z$1 is non-standard C, use %z$1\n" . $herecurr);
|
||||||
|
$show_Z = 0;
|
||||||
|
}
|
||||||
|
# check for 0x<decimal>
|
||||||
|
if ($string =~ /0x%[\*\d\.\$\Llzth]*[diou]/) {
|
||||||
|
ERROR("PRINTF_0XDECIMAL",
|
||||||
"Prefixing 0x with decimal output is defective\n" . $herecurr);
|
"Prefixing 0x with decimal output is defective\n" . $herecurr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5130,6 +5328,12 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for logging continuations
|
||||||
|
if ($line =~ /\bprintk\s*\(\s*KERN_CONT\b|\bpr_cont\s*\(/) {
|
||||||
|
WARN("LOGGING_CONTINUATION",
|
||||||
|
"Avoid logging continuation uses where feasible\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
# check for mask then right shift without a parentheses
|
# check for mask then right shift without a parentheses
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
if ($^V && $^V ge 5.10.0 &&
|
||||||
$line =~ /$LvalOrFunc\s*\&\s*($LvalOrFunc)\s*>>/ &&
|
$line =~ /$LvalOrFunc\s*\&\s*($LvalOrFunc)\s*>>/ &&
|
||||||
|
@ -5423,8 +5627,9 @@ sub process {
|
||||||
"Using weak declarations can have unintended link defects\n" . $herecurr);
|
"Using weak declarations can have unintended link defects\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for c99 types like uint8_t used outside of uapi/
|
# check for c99 types like uint8_t used outside of uapi/ and tools/
|
||||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||||
|
$realfile !~ m@\btools/@ &&
|
||||||
$line =~ /\b($Declare)\s*$Ident\s*[=;,\[]/) {
|
$line =~ /\b($Declare)\s*$Ident\s*[=;,\[]/) {
|
||||||
my $type = $1;
|
my $type = $1;
|
||||||
if ($type =~ /\b($typeC99Typedefs)\b/) {
|
if ($type =~ /\b($typeC99Typedefs)\b/) {
|
||||||
|
@ -5514,46 +5719,46 @@ sub process {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for memcpy(foo, bar, ETH_ALEN) that could be ether_addr_copy(foo, bar)
|
# Check for memcpy(foo, bar, ETH_ALEN) that could be ether_addr_copy(foo, bar)
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
# if ($^V && $^V ge 5.10.0 &&
|
||||||
defined $stat &&
|
# defined $stat &&
|
||||||
$stat =~ /^\+(?:.*?)\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
# $stat =~ /^\+(?:.*?)\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||||
if (WARN("PREFER_ETHER_ADDR_COPY",
|
# if (WARN("PREFER_ETHER_ADDR_COPY",
|
||||||
"Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . "$here\n$stat\n") &&
|
# "Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . "$here\n$stat\n") &&
|
||||||
$fix) {
|
# $fix) {
|
||||||
$fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
|
# $fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
|
||||||
# Check for memcmp(foo, bar, ETH_ALEN) that could be ether_addr_equal*(foo, bar)
|
# Check for memcmp(foo, bar, ETH_ALEN) that could be ether_addr_equal*(foo, bar)
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
# if ($^V && $^V ge 5.10.0 &&
|
||||||
defined $stat &&
|
# defined $stat &&
|
||||||
$stat =~ /^\+(?:.*?)\bmemcmp\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
# $stat =~ /^\+(?:.*?)\bmemcmp\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||||
WARN("PREFER_ETHER_ADDR_EQUAL",
|
# WARN("PREFER_ETHER_ADDR_EQUAL",
|
||||||
"Prefer ether_addr_equal() or ether_addr_equal_unaligned() over memcmp()\n" . "$here\n$stat\n")
|
# "Prefer ether_addr_equal() or ether_addr_equal_unaligned() over memcmp()\n" . "$here\n$stat\n")
|
||||||
}
|
# }
|
||||||
|
|
||||||
# check for memset(foo, 0x0, ETH_ALEN) that could be eth_zero_addr
|
# check for memset(foo, 0x0, ETH_ALEN) that could be eth_zero_addr
|
||||||
# check for memset(foo, 0xFF, ETH_ALEN) that could be eth_broadcast_addr
|
# check for memset(foo, 0xFF, ETH_ALEN) that could be eth_broadcast_addr
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
# if ($^V && $^V ge 5.10.0 &&
|
||||||
defined $stat &&
|
# defined $stat &&
|
||||||
$stat =~ /^\+(?:.*?)\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
# $stat =~ /^\+(?:.*?)\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||||
|
#
|
||||||
my $ms_val = $7;
|
# my $ms_val = $7;
|
||||||
|
#
|
||||||
if ($ms_val =~ /^(?:0x|)0+$/i) {
|
# if ($ms_val =~ /^(?:0x|)0+$/i) {
|
||||||
if (WARN("PREFER_ETH_ZERO_ADDR",
|
# if (WARN("PREFER_ETH_ZERO_ADDR",
|
||||||
"Prefer eth_zero_addr over memset()\n" . "$here\n$stat\n") &&
|
# "Prefer eth_zero_addr over memset()\n" . "$here\n$stat\n") &&
|
||||||
$fix) {
|
# $fix) {
|
||||||
$fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_zero_addr($2)/;
|
# $fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_zero_addr($2)/;
|
||||||
}
|
# }
|
||||||
} elsif ($ms_val =~ /^(?:0xff|255)$/i) {
|
# } elsif ($ms_val =~ /^(?:0xff|255)$/i) {
|
||||||
if (WARN("PREFER_ETH_BROADCAST_ADDR",
|
# if (WARN("PREFER_ETH_BROADCAST_ADDR",
|
||||||
"Prefer eth_broadcast_addr() over memset()\n" . "$here\n$stat\n") &&
|
# "Prefer eth_broadcast_addr() over memset()\n" . "$here\n$stat\n") &&
|
||||||
$fix) {
|
# $fix) {
|
||||||
$fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_broadcast_addr($2)/;
|
# $fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_broadcast_addr($2)/;
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
|
||||||
# typecasts on min/max could be min_t/max_t
|
# typecasts on min/max could be min_t/max_t
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
if ($^V && $^V ge 5.10.0 &&
|
||||||
|
@ -5673,13 +5878,26 @@ sub process {
|
||||||
"externs should be avoided in .c files\n" . $herecurr);
|
"externs should be avoided in .c files\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($realfile =~ /\.[ch]$/ && defined $stat &&
|
||||||
|
$stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&
|
||||||
|
$1 ne "void") {
|
||||||
|
my $args = trim($1);
|
||||||
|
while ($args =~ m/\s*($Type\s*(?:$Ident|\(\s*\*\s*$Ident?\s*\)\s*$balanced_parens)?)/g) {
|
||||||
|
my $arg = trim($1);
|
||||||
|
if ($arg =~ /^$Type$/ && $arg !~ /enum\s+$Ident$/) {
|
||||||
|
WARN("FUNCTION_ARGUMENTS",
|
||||||
|
"function definition argument '$arg' should also have an identifier name\n" . $herecurr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# checks for new __setup's
|
# checks for new __setup's
|
||||||
if ($rawline =~ /\b__setup\("([^"]*)"/) {
|
if ($rawline =~ /\b__setup\("([^"]*)"/) {
|
||||||
my $name = $1;
|
my $name = $1;
|
||||||
|
|
||||||
if (!grep(/$name/, @setup_docs)) {
|
if (!grep(/$name/, @setup_docs)) {
|
||||||
CHK("UNDOCUMENTED_SETUP",
|
CHK("UNDOCUMENTED_SETUP",
|
||||||
"__setup appears un-documented -- check Documentation/kernel-parameters.txt\n" . $herecurr);
|
"__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.rst\n" . $herecurr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5744,8 +5962,9 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for #defines like: 1 << <digit> that could be BIT(digit)
|
# check for #defines like: 1 << <digit> that could be BIT(digit), it is not exported to uapi
|
||||||
if ($line =~ /#\s*define\s+\w+\s+\(?\s*1\s*([ulUL]*)\s*\<\<\s*(?:\d+|$Ident)\s*\)?/) {
|
if ($realfile !~ m@^include/uapi/@ &&
|
||||||
|
$line =~ /#\s*define\s+\w+\s+\(?\s*1\s*([ulUL]*)\s*\<\<\s*(?:\d+|$Ident)\s*\)?/) {
|
||||||
my $ull = "";
|
my $ull = "";
|
||||||
$ull = "_ULL" if (defined($1) && $1 =~ /ll/i);
|
$ull = "_ULL" if (defined($1) && $1 =~ /ll/i);
|
||||||
if (CHK("BIT_MACRO",
|
if (CHK("BIT_MACRO",
|
||||||
|
@ -5786,7 +6005,7 @@ sub process {
|
||||||
}
|
}
|
||||||
if (!$has_break && $has_statement) {
|
if (!$has_break && $has_statement) {
|
||||||
WARN("MISSING_BREAK",
|
WARN("MISSING_BREAK",
|
||||||
"Possible switch case/default not preceeded by break or fallthrough comment\n" . $herecurr);
|
"Possible switch case/default not preceded by break or fallthrough comment\n" . $herecurr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5871,46 +6090,6 @@ sub process {
|
||||||
}
|
}
|
||||||
|
|
||||||
# check for various structs that are normally const (ops, kgdb, device_tree)
|
# check for various structs that are normally const (ops, kgdb, device_tree)
|
||||||
my $const_structs = qr{
|
|
||||||
acpi_dock_ops|
|
|
||||||
address_space_operations|
|
|
||||||
backlight_ops|
|
|
||||||
block_device_operations|
|
|
||||||
dentry_operations|
|
|
||||||
dev_pm_ops|
|
|
||||||
dma_map_ops|
|
|
||||||
extent_io_ops|
|
|
||||||
file_lock_operations|
|
|
||||||
file_operations|
|
|
||||||
hv_ops|
|
|
||||||
ide_dma_ops|
|
|
||||||
intel_dvo_dev_ops|
|
|
||||||
item_operations|
|
|
||||||
iwl_ops|
|
|
||||||
kgdb_arch|
|
|
||||||
kgdb_io|
|
|
||||||
kset_uevent_ops|
|
|
||||||
lock_manager_operations|
|
|
||||||
microcode_ops|
|
|
||||||
mtrr_ops|
|
|
||||||
neigh_ops|
|
|
||||||
nlmsvc_binding|
|
|
||||||
of_device_id|
|
|
||||||
pci_raw_ops|
|
|
||||||
pipe_buf_operations|
|
|
||||||
platform_hibernation_ops|
|
|
||||||
platform_suspend_ops|
|
|
||||||
proto_ops|
|
|
||||||
rpc_pipe_ops|
|
|
||||||
seq_operations|
|
|
||||||
snd_ac97_build_ops|
|
|
||||||
soc_pcmcia_socket_ops|
|
|
||||||
stacktrace_ops|
|
|
||||||
sysfs_ops|
|
|
||||||
tty_operations|
|
|
||||||
uart_ops|
|
|
||||||
usb_mon_operations|
|
|
||||||
wd_ops}x;
|
|
||||||
if ($line !~ /\bconst\b/ &&
|
if ($line !~ /\bconst\b/ &&
|
||||||
$line =~ /\bstruct\s+($const_structs)\b/) {
|
$line =~ /\bstruct\s+($const_structs)\b/) {
|
||||||
WARN("CONST_STRUCT",
|
WARN("CONST_STRUCT",
|
||||||
|
@ -5977,6 +6156,12 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for mutex_trylock_recursive usage
|
||||||
|
if ($line =~ /mutex_trylock_recursive/) {
|
||||||
|
ERROR("LOCKING",
|
||||||
|
"recursive locking is bad, do not use this ever.\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
# check for lockdep_set_novalidate_class
|
# check for lockdep_set_novalidate_class
|
||||||
if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
|
if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
|
||||||
$line =~ /__lockdep_no_validate__\s*\)/ ) {
|
$line =~ /__lockdep_no_validate__\s*\)/ ) {
|
||||||
|
@ -5997,34 +6182,69 @@ sub process {
|
||||||
# Mode permission misuses where it seems decimal should be octal
|
# Mode permission misuses where it seems decimal should be octal
|
||||||
# This uses a shortcut match to avoid unnecessary uses of a slow foreach loop
|
# This uses a shortcut match to avoid unnecessary uses of a slow foreach loop
|
||||||
if ($^V && $^V ge 5.10.0 &&
|
if ($^V && $^V ge 5.10.0 &&
|
||||||
|
defined $stat &&
|
||||||
$line =~ /$mode_perms_search/) {
|
$line =~ /$mode_perms_search/) {
|
||||||
foreach my $entry (@mode_permission_funcs) {
|
foreach my $entry (@mode_permission_funcs) {
|
||||||
my $func = $entry->[0];
|
my $func = $entry->[0];
|
||||||
my $arg_pos = $entry->[1];
|
my $arg_pos = $entry->[1];
|
||||||
|
|
||||||
|
my $lc = $stat =~ tr@\n@@;
|
||||||
|
$lc = $lc + $linenr;
|
||||||
|
my $stat_real = raw_line($linenr, 0);
|
||||||
|
for (my $count = $linenr + 1; $count <= $lc; $count++) {
|
||||||
|
$stat_real = $stat_real . "\n" . raw_line($count, 0);
|
||||||
|
}
|
||||||
|
|
||||||
my $skip_args = "";
|
my $skip_args = "";
|
||||||
if ($arg_pos > 1) {
|
if ($arg_pos > 1) {
|
||||||
$arg_pos--;
|
$arg_pos--;
|
||||||
$skip_args = "(?:\\s*$FuncArg\\s*,\\s*){$arg_pos,$arg_pos}";
|
$skip_args = "(?:\\s*$FuncArg\\s*,\\s*){$arg_pos,$arg_pos}";
|
||||||
}
|
}
|
||||||
my $test = "\\b$func\\s*\\(${skip_args}([\\d]+)\\s*[,\\)]";
|
my $test = "\\b$func\\s*\\(${skip_args}($FuncArg(?:\\|\\s*$FuncArg)*)\\s*[,\\)]";
|
||||||
if ($line =~ /$test/) {
|
if ($stat =~ /$test/) {
|
||||||
my $val = $1;
|
my $val = $1;
|
||||||
$val = $6 if ($skip_args ne "");
|
$val = $6 if ($skip_args ne "");
|
||||||
|
if (($val =~ /^$Int$/ && $val !~ /^$Octal$/) ||
|
||||||
if ($val !~ /^0$/ &&
|
($val =~ /^$Octal$/ && length($val) ne 4)) {
|
||||||
(($val =~ /^$Int$/ && $val !~ /^$Octal$/) ||
|
|
||||||
length($val) ne 4)) {
|
|
||||||
ERROR("NON_OCTAL_PERMISSIONS",
|
ERROR("NON_OCTAL_PERMISSIONS",
|
||||||
"Use 4 digit octal (0777) not decimal permissions\n" . $herecurr);
|
"Use 4 digit octal (0777) not decimal permissions\n" . "$here\n" . $stat_real);
|
||||||
} elsif ($val =~ /^$Octal$/ && (oct($val) & 02)) {
|
}
|
||||||
|
if ($val =~ /^$Octal$/ && (oct($val) & 02)) {
|
||||||
ERROR("EXPORTED_WORLD_WRITABLE",
|
ERROR("EXPORTED_WORLD_WRITABLE",
|
||||||
"Exporting writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
|
"Exporting writable files is usually an error. Consider more restrictive permissions.\n" . "$here\n" . $stat_real);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for uses of S_<PERMS> that could be octal for readability
|
||||||
|
if ($line =~ /\b$mode_perms_string_search\b/) {
|
||||||
|
my $val = "";
|
||||||
|
my $oval = "";
|
||||||
|
my $to = 0;
|
||||||
|
my $curpos = 0;
|
||||||
|
my $lastpos = 0;
|
||||||
|
while ($line =~ /\b(($mode_perms_string_search)\b(?:\s*\|\s*)?\s*)/g) {
|
||||||
|
$curpos = pos($line);
|
||||||
|
my $match = $2;
|
||||||
|
my $omatch = $1;
|
||||||
|
last if ($lastpos > 0 && ($curpos - length($omatch) != $lastpos));
|
||||||
|
$lastpos = $curpos;
|
||||||
|
$to |= $mode_permission_string_types{$match};
|
||||||
|
$val .= '\s*\|\s*' if ($val ne "");
|
||||||
|
$val .= $match;
|
||||||
|
$oval .= $omatch;
|
||||||
|
}
|
||||||
|
$oval =~ s/^\s*\|\s*//;
|
||||||
|
$oval =~ s/\s*\|\s*$//;
|
||||||
|
my $octal = sprintf("%04o", $to);
|
||||||
|
if (WARN("SYMBOLIC_PERMS",
|
||||||
|
"Symbolic permissions '$oval' are not preferred. Consider using octal permissions '$octal'.\n" . $herecurr) &&
|
||||||
|
$fix) {
|
||||||
|
$fixed[$fixlinenr] =~ s/$val/$octal/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# validate content of MODULE_LICENSE against list from include/linux/module.h
|
# validate content of MODULE_LICENSE against list from include/linux/module.h
|
||||||
if ($line =~ /\bMODULE_LICENSE\s*\(\s*($String)\s*\)/) {
|
if ($line =~ /\bMODULE_LICENSE\s*\(\s*($String)\s*\)/) {
|
||||||
my $extracted_string = get_quoted_string($line, $rawline);
|
my $extracted_string = get_quoted_string($line, $rawline);
|
||||||
|
@ -6066,7 +6286,7 @@ sub process {
|
||||||
ERROR("NOT_UNIFIED_DIFF",
|
ERROR("NOT_UNIFIED_DIFF",
|
||||||
"Does not appear to be a unified-diff format patch\n");
|
"Does not appear to be a unified-diff format patch\n");
|
||||||
}
|
}
|
||||||
if ($is_patch && $filename ne '-' && $chk_signoff && $signoff == 0) {
|
if ($is_patch && $has_commit_log && $chk_signoff && $signoff == 0) {
|
||||||
ERROR("MISSING_SIGN_OFF",
|
ERROR("MISSING_SIGN_OFF",
|
||||||
"Missing Signed-off-by: line(s)\n");
|
"Missing Signed-off-by: line(s)\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
acpi_dock_ops
|
||||||
|
address_space_operations
|
||||||
|
backlight_ops
|
||||||
|
block_device_operations
|
||||||
|
dentry_operations
|
||||||
|
dev_pm_ops
|
||||||
|
dma_map_ops
|
||||||
|
extent_io_ops
|
||||||
|
file_lock_operations
|
||||||
|
file_operations
|
||||||
|
hv_ops
|
||||||
|
ide_dma_ops
|
||||||
|
intel_dvo_dev_ops
|
||||||
|
item_operations
|
||||||
|
iwl_ops
|
||||||
|
kgdb_arch
|
||||||
|
kgdb_io
|
||||||
|
kset_uevent_ops
|
||||||
|
lock_manager_operations
|
||||||
|
microcode_ops
|
||||||
|
mtrr_ops
|
||||||
|
neigh_ops
|
||||||
|
nlmsvc_binding
|
||||||
|
of_device_id
|
||||||
|
pci_raw_ops
|
||||||
|
pipe_buf_operations
|
||||||
|
platform_hibernation_ops
|
||||||
|
platform_suspend_ops
|
||||||
|
proto_ops
|
||||||
|
rpc_pipe_ops
|
||||||
|
seq_operations
|
||||||
|
snd_ac97_build_ops
|
||||||
|
soc_pcmcia_socket_ops
|
||||||
|
stacktrace_ops
|
||||||
|
sysfs_ops
|
||||||
|
tty_operations
|
||||||
|
uart_ops
|
||||||
|
usb_mon_operations
|
||||||
|
wd_ops
|
|
@ -16,6 +16,7 @@ absense||absence
|
||||||
absolut||absolute
|
absolut||absolute
|
||||||
absoulte||absolute
|
absoulte||absolute
|
||||||
acccess||access
|
acccess||access
|
||||||
|
acceess||access
|
||||||
acceleratoin||acceleration
|
acceleratoin||acceleration
|
||||||
accelleration||acceleration
|
accelleration||acceleration
|
||||||
accesing||accessing
|
accesing||accessing
|
||||||
|
@ -39,13 +40,14 @@ achitecture||architecture
|
||||||
acient||ancient
|
acient||ancient
|
||||||
acitions||actions
|
acitions||actions
|
||||||
acitve||active
|
acitve||active
|
||||||
acknowldegement||acknowldegement
|
acknowldegement||acknowledgment
|
||||||
acknowledgement||acknowledgment
|
acknowledgement||acknowledgment
|
||||||
ackowledge||acknowledge
|
ackowledge||acknowledge
|
||||||
ackowledged||acknowledged
|
ackowledged||acknowledged
|
||||||
acording||according
|
acording||according
|
||||||
activete||activate
|
activete||activate
|
||||||
acumulating||accumulating
|
acumulating||accumulating
|
||||||
|
acumulator||accumulator
|
||||||
adapater||adapter
|
adapater||adapter
|
||||||
addional||additional
|
addional||additional
|
||||||
additionaly||additionally
|
additionaly||additionally
|
||||||
|
@ -60,15 +62,19 @@ adress||address
|
||||||
adresses||addresses
|
adresses||addresses
|
||||||
adviced||advised
|
adviced||advised
|
||||||
afecting||affecting
|
afecting||affecting
|
||||||
|
againt||against
|
||||||
agaist||against
|
agaist||against
|
||||||
albumns||albums
|
albumns||albums
|
||||||
alegorical||allegorical
|
alegorical||allegorical
|
||||||
|
algined||aligned
|
||||||
algorith||algorithm
|
algorith||algorithm
|
||||||
algorithmical||algorithmically
|
algorithmical||algorithmically
|
||||||
algoritm||algorithm
|
algoritm||algorithm
|
||||||
algoritms||algorithms
|
algoritms||algorithms
|
||||||
algorrithm||algorithm
|
algorrithm||algorithm
|
||||||
algorritm||algorithm
|
algorritm||algorithm
|
||||||
|
aligment||alignment
|
||||||
|
alignement||alignment
|
||||||
allign||align
|
allign||align
|
||||||
allocatrd||allocated
|
allocatrd||allocated
|
||||||
allocte||allocate
|
allocte||allocate
|
||||||
|
@ -84,6 +90,10 @@ alue||value
|
||||||
ambigious||ambiguous
|
ambigious||ambiguous
|
||||||
amoung||among
|
amoung||among
|
||||||
amout||amount
|
amout||amount
|
||||||
|
an union||a union
|
||||||
|
an user||a user
|
||||||
|
an userspace||a userspace
|
||||||
|
an one||a one
|
||||||
analysator||analyzer
|
analysator||analyzer
|
||||||
ang||and
|
ang||and
|
||||||
anniversery||anniversary
|
anniversery||anniversary
|
||||||
|
@ -96,6 +106,7 @@ appearence||appearance
|
||||||
applicaion||application
|
applicaion||application
|
||||||
appliction||application
|
appliction||application
|
||||||
applictions||applications
|
applictions||applications
|
||||||
|
applys||applies
|
||||||
appplications||applications
|
appplications||applications
|
||||||
appropiate||appropriate
|
appropiate||appropriate
|
||||||
appropriatly||appropriately
|
appropriatly||appropriately
|
||||||
|
@ -184,6 +195,7 @@ cacluated||calculated
|
||||||
caculation||calculation
|
caculation||calculation
|
||||||
calender||calendar
|
calender||calendar
|
||||||
calle||called
|
calle||called
|
||||||
|
callibration||calibration
|
||||||
calucate||calculate
|
calucate||calculate
|
||||||
calulate||calculate
|
calulate||calculate
|
||||||
cancelation||cancellation
|
cancelation||cancellation
|
||||||
|
@ -234,6 +246,9 @@ commited||committed
|
||||||
commiting||committing
|
commiting||committing
|
||||||
committ||commit
|
committ||commit
|
||||||
commoditiy||commodity
|
commoditiy||commodity
|
||||||
|
comsume||consume
|
||||||
|
comsumer||consumer
|
||||||
|
comsuming||consuming
|
||||||
compability||compatibility
|
compability||compatibility
|
||||||
compaibility||compatibility
|
compaibility||compatibility
|
||||||
compatability||compatibility
|
compatability||compatibility
|
||||||
|
@ -244,6 +259,7 @@ compatiblity||compatibility
|
||||||
competion||completion
|
competion||completion
|
||||||
compilant||compliant
|
compilant||compliant
|
||||||
compleatly||completely
|
compleatly||completely
|
||||||
|
completition||completion
|
||||||
completly||completely
|
completly||completely
|
||||||
complient||compliant
|
complient||compliant
|
||||||
componnents||components
|
componnents||components
|
||||||
|
@ -254,9 +270,11 @@ comunication||communication
|
||||||
conbination||combination
|
conbination||combination
|
||||||
conditionaly||conditionally
|
conditionaly||conditionally
|
||||||
conected||connected
|
conected||connected
|
||||||
|
configuartion||configuration
|
||||||
configuratoin||configuration
|
configuratoin||configuration
|
||||||
configuraton||configuration
|
configuraton||configuration
|
||||||
configuretion||configuration
|
configuretion||configuration
|
||||||
|
configutation||configuration
|
||||||
conider||consider
|
conider||consider
|
||||||
conjuction||conjunction
|
conjuction||conjunction
|
||||||
connectinos||connections
|
connectinos||connections
|
||||||
|
@ -305,6 +323,9 @@ defintion||definition
|
||||||
defintions||definitions
|
defintions||definitions
|
||||||
defualt||default
|
defualt||default
|
||||||
defult||default
|
defult||default
|
||||||
|
deintializing||deinitializing
|
||||||
|
deintialize||deinitialize
|
||||||
|
deintialized||deinitialized
|
||||||
deivce||device
|
deivce||device
|
||||||
delared||declared
|
delared||declared
|
||||||
delare||declare
|
delare||declare
|
||||||
|
@ -317,6 +338,7 @@ dependant||dependent
|
||||||
depreacted||deprecated
|
depreacted||deprecated
|
||||||
depreacte||deprecate
|
depreacte||deprecate
|
||||||
desactivate||deactivate
|
desactivate||deactivate
|
||||||
|
desciptor||descriptor
|
||||||
desciptors||descriptors
|
desciptors||descriptors
|
||||||
descripton||description
|
descripton||description
|
||||||
descrition||description
|
descrition||description
|
||||||
|
@ -346,9 +368,12 @@ differrence||difference
|
||||||
difinition||definition
|
difinition||definition
|
||||||
diplay||display
|
diplay||display
|
||||||
direectly||directly
|
direectly||directly
|
||||||
|
disassocation||disassociation
|
||||||
disapear||disappear
|
disapear||disappear
|
||||||
disapeared||disappeared
|
disapeared||disappeared
|
||||||
disappared||disappeared
|
disappared||disappeared
|
||||||
|
disble||disable
|
||||||
|
disbled||disabled
|
||||||
disconnet||disconnect
|
disconnet||disconnect
|
||||||
discontinous||discontinuous
|
discontinous||discontinuous
|
||||||
dispertion||dispersion
|
dispertion||dispersion
|
||||||
|
@ -369,10 +394,12 @@ easilly||easily
|
||||||
ecspecially||especially
|
ecspecially||especially
|
||||||
edditable||editable
|
edditable||editable
|
||||||
editting||editing
|
editting||editing
|
||||||
|
efective||effective
|
||||||
efficently||efficiently
|
efficently||efficiently
|
||||||
ehther||ether
|
ehther||ether
|
||||||
eigth||eight
|
eigth||eight
|
||||||
eletronic||electronic
|
eletronic||electronic
|
||||||
|
embeded||embedded
|
||||||
enabledi||enabled
|
enabledi||enabled
|
||||||
enchanced||enhanced
|
enchanced||enhanced
|
||||||
encorporating||incorporating
|
encorporating||incorporating
|
||||||
|
@ -408,6 +435,7 @@ expecially||especially
|
||||||
explicite||explicit
|
explicite||explicit
|
||||||
explicitely||explicitly
|
explicitely||explicitly
|
||||||
explict||explicit
|
explict||explicit
|
||||||
|
explictely||explicitly
|
||||||
explictly||explicitly
|
explictly||explicitly
|
||||||
expresion||expression
|
expresion||expression
|
||||||
exprimental||experimental
|
exprimental||experimental
|
||||||
|
@ -417,9 +445,12 @@ extention||extension
|
||||||
extracter||extractor
|
extracter||extractor
|
||||||
faild||failed
|
faild||failed
|
||||||
faill||fail
|
faill||fail
|
||||||
|
failied||failed
|
||||||
|
faillure||failure
|
||||||
failue||failure
|
failue||failure
|
||||||
failuer||failure
|
failuer||failure
|
||||||
faireness||fairness
|
faireness||fairness
|
||||||
|
falied||failed
|
||||||
faliure||failure
|
faliure||failure
|
||||||
familar||familiar
|
familar||familiar
|
||||||
fatser||faster
|
fatser||faster
|
||||||
|
@ -436,11 +467,13 @@ finsih||finish
|
||||||
flusing||flushing
|
flusing||flushing
|
||||||
folloing||following
|
folloing||following
|
||||||
followign||following
|
followign||following
|
||||||
|
followings||following
|
||||||
follwing||following
|
follwing||following
|
||||||
forseeable||foreseeable
|
forseeable||foreseeable
|
||||||
forse||force
|
forse||force
|
||||||
fortan||fortran
|
fortan||fortran
|
||||||
forwardig||forwarding
|
forwardig||forwarding
|
||||||
|
framming||framing
|
||||||
framwork||framework
|
framwork||framework
|
||||||
frequncy||frequency
|
frequncy||frequency
|
||||||
frome||from
|
frome||from
|
||||||
|
@ -482,6 +515,7 @@ howver||however
|
||||||
hsould||should
|
hsould||should
|
||||||
hypter||hyper
|
hypter||hyper
|
||||||
identidier||identifier
|
identidier||identifier
|
||||||
|
illigal||illegal
|
||||||
imblance||imbalance
|
imblance||imbalance
|
||||||
immeadiately||immediately
|
immeadiately||immediately
|
||||||
immedaite||immediate
|
immedaite||immediate
|
||||||
|
@ -520,11 +554,13 @@ informtion||information
|
||||||
infromation||information
|
infromation||information
|
||||||
ingore||ignore
|
ingore||ignore
|
||||||
inital||initial
|
inital||initial
|
||||||
|
initalized||initialized
|
||||||
initalised||initialized
|
initalised||initialized
|
||||||
initalise||initialize
|
initalise||initialize
|
||||||
initalize||initialize
|
initalize||initialize
|
||||||
initation||initiation
|
initation||initiation
|
||||||
initators||initiators
|
initators||initiators
|
||||||
|
initialiazation||initialization
|
||||||
initializiation||initialization
|
initializiation||initialization
|
||||||
initialzed||initialized
|
initialzed||initialized
|
||||||
initilization||initialization
|
initilization||initialization
|
||||||
|
@ -532,6 +568,7 @@ initilize||initialize
|
||||||
inofficial||unofficial
|
inofficial||unofficial
|
||||||
insititute||institute
|
insititute||institute
|
||||||
instal||install
|
instal||install
|
||||||
|
instanciated||instantiated
|
||||||
inteface||interface
|
inteface||interface
|
||||||
integreated||integrated
|
integreated||integrated
|
||||||
integrety||integrity
|
integrety||integrity
|
||||||
|
@ -553,13 +590,15 @@ interruptted||interrupted
|
||||||
interupted||interrupted
|
interupted||interrupted
|
||||||
interupt||interrupt
|
interupt||interrupt
|
||||||
intial||initial
|
intial||initial
|
||||||
|
intialization||initialization
|
||||||
intialized||initialized
|
intialized||initialized
|
||||||
intialize||initialize
|
intialize||initialize
|
||||||
intregral||integral
|
intregral||integral
|
||||||
intrrupt||interrupt
|
intrrupt||interrupt
|
||||||
|
intterrupt||interrupt
|
||||||
intuative||intuitive
|
intuative||intuitive
|
||||||
invaid||invalid
|
invaid||invalid
|
||||||
invalde||invald
|
invalde||invalid
|
||||||
invalide||invalid
|
invalide||invalid
|
||||||
invididual||individual
|
invididual||individual
|
||||||
invokation||invocation
|
invokation||invocation
|
||||||
|
@ -567,6 +606,8 @@ invokations||invocations
|
||||||
irrelevent||irrelevant
|
irrelevent||irrelevant
|
||||||
isnt||isn't
|
isnt||isn't
|
||||||
isssue||issue
|
isssue||issue
|
||||||
|
iternations||iterations
|
||||||
|
itertation||iteration
|
||||||
itslef||itself
|
itslef||itself
|
||||||
jave||java
|
jave||java
|
||||||
jeffies||jiffies
|
jeffies||jiffies
|
||||||
|
@ -621,6 +662,7 @@ messsage||message
|
||||||
messsages||messages
|
messsages||messages
|
||||||
microprocesspr||microprocessor
|
microprocesspr||microprocessor
|
||||||
milliseonds||milliseconds
|
milliseonds||milliseconds
|
||||||
|
minium||minimum
|
||||||
minumum||minimum
|
minumum||minimum
|
||||||
miscelleneous||miscellaneous
|
miscelleneous||miscellaneous
|
||||||
misformed||malformed
|
misformed||malformed
|
||||||
|
@ -629,7 +671,6 @@ mispelt||misspelt
|
||||||
miximum||maximum
|
miximum||maximum
|
||||||
mmnemonic||mnemonic
|
mmnemonic||mnemonic
|
||||||
mnay||many
|
mnay||many
|
||||||
modeled||modelled
|
|
||||||
modulues||modules
|
modulues||modules
|
||||||
monochorome||monochrome
|
monochorome||monochrome
|
||||||
monochromo||monochrome
|
monochromo||monochrome
|
||||||
|
@ -650,6 +691,7 @@ neccecary||necessary
|
||||||
neccesary||necessary
|
neccesary||necessary
|
||||||
neccessary||necessary
|
neccessary||necessary
|
||||||
necesary||necessary
|
necesary||necessary
|
||||||
|
neded||needed
|
||||||
negaive||negative
|
negaive||negative
|
||||||
negoitation||negotiation
|
negoitation||negotiation
|
||||||
negotation||negotiation
|
negotation||negotiation
|
||||||
|
@ -669,8 +711,11 @@ occurances||occurrences
|
||||||
occured||occurred
|
occured||occurred
|
||||||
occurence||occurrence
|
occurence||occurrence
|
||||||
occure||occurred
|
occure||occurred
|
||||||
|
occured||occurred
|
||||||
occuring||occurring
|
occuring||occurring
|
||||||
offet||offset
|
offet||offset
|
||||||
|
omited||omitted
|
||||||
|
omiting||omitting
|
||||||
omitt||omit
|
omitt||omit
|
||||||
ommiting||omitting
|
ommiting||omitting
|
||||||
ommitted||omitted
|
ommitted||omitted
|
||||||
|
@ -682,13 +727,19 @@ optionnal||optional
|
||||||
optmizations||optimizations
|
optmizations||optimizations
|
||||||
orientatied||orientated
|
orientatied||orientated
|
||||||
orientied||oriented
|
orientied||oriented
|
||||||
|
orignal||original
|
||||||
otherise||otherwise
|
otherise||otherwise
|
||||||
ouput||output
|
ouput||output
|
||||||
|
oustanding||outstanding
|
||||||
overaall||overall
|
overaall||overall
|
||||||
overhread||overhead
|
overhread||overhead
|
||||||
overlaping||overlapping
|
overlaping||overlapping
|
||||||
|
overide||override
|
||||||
|
overrided||overridden
|
||||||
overriden||overridden
|
overriden||overridden
|
||||||
overun||overrun
|
overun||overrun
|
||||||
|
overwritting||overwriting
|
||||||
|
overwriten||overwritten
|
||||||
pacakge||package
|
pacakge||package
|
||||||
pachage||package
|
pachage||package
|
||||||
packacge||package
|
packacge||package
|
||||||
|
@ -699,6 +750,7 @@ pakage||package
|
||||||
pallette||palette
|
pallette||palette
|
||||||
paln||plan
|
paln||plan
|
||||||
paramameters||parameters
|
paramameters||parameters
|
||||||
|
paramaters||parameters
|
||||||
paramater||parameter
|
paramater||parameter
|
||||||
parametes||parameters
|
parametes||parameters
|
||||||
parametised||parametrised
|
parametised||parametrised
|
||||||
|
@ -706,6 +758,7 @@ paramter||parameter
|
||||||
paramters||parameters
|
paramters||parameters
|
||||||
particuarly||particularly
|
particuarly||particularly
|
||||||
particularily||particularly
|
particularily||particularly
|
||||||
|
partiton||partition
|
||||||
pased||passed
|
pased||passed
|
||||||
passin||passing
|
passin||passing
|
||||||
pathes||paths
|
pathes||paths
|
||||||
|
@ -725,6 +778,7 @@ pleaes||please
|
||||||
ploting||plotting
|
ploting||plotting
|
||||||
plugable||pluggable
|
plugable||pluggable
|
||||||
poinnter||pointer
|
poinnter||pointer
|
||||||
|
pointeur||pointer
|
||||||
poiter||pointer
|
poiter||pointer
|
||||||
posible||possible
|
posible||possible
|
||||||
positon||position
|
positon||position
|
||||||
|
@ -753,6 +807,7 @@ procceed||proceed
|
||||||
proccesors||processors
|
proccesors||processors
|
||||||
procesed||processed
|
procesed||processed
|
||||||
proces||process
|
proces||process
|
||||||
|
procesing||processing
|
||||||
processessing||processing
|
processessing||processing
|
||||||
processess||processes
|
processess||processes
|
||||||
processpr||processor
|
processpr||processor
|
||||||
|
@ -781,6 +836,7 @@ protable||portable
|
||||||
protcol||protocol
|
protcol||protocol
|
||||||
protecion||protection
|
protecion||protection
|
||||||
protocoll||protocol
|
protocoll||protocol
|
||||||
|
promixity||proximity
|
||||||
psudo||pseudo
|
psudo||pseudo
|
||||||
psuedo||pseudo
|
psuedo||pseudo
|
||||||
psychadelic||psychedelic
|
psychadelic||psychedelic
|
||||||
|
@ -802,6 +858,7 @@ recommanded||recommended
|
||||||
recyle||recycle
|
recyle||recycle
|
||||||
redircet||redirect
|
redircet||redirect
|
||||||
redirectrion||redirection
|
redirectrion||redirection
|
||||||
|
reename||rename
|
||||||
refcounf||refcount
|
refcounf||refcount
|
||||||
refence||reference
|
refence||reference
|
||||||
refered||referred
|
refered||referred
|
||||||
|
@ -938,6 +995,7 @@ straming||streaming
|
||||||
struc||struct
|
struc||struct
|
||||||
structres||structures
|
structres||structures
|
||||||
stuct||struct
|
stuct||struct
|
||||||
|
strucuture||structure
|
||||||
stucture||structure
|
stucture||structure
|
||||||
sturcture||structure
|
sturcture||structure
|
||||||
subdirectoires||subdirectories
|
subdirectoires||subdirectories
|
||||||
|
@ -945,7 +1003,9 @@ suble||subtle
|
||||||
substract||subtract
|
substract||subtract
|
||||||
succesfully||successfully
|
succesfully||successfully
|
||||||
succesful||successful
|
succesful||successful
|
||||||
|
successed||succeeded
|
||||||
successfull||successful
|
successfull||successful
|
||||||
|
successfuly||successfully
|
||||||
sucessfully||successfully
|
sucessfully||successfully
|
||||||
sucess||success
|
sucess||success
|
||||||
superflous||superfluous
|
superflous||superfluous
|
||||||
|
@ -961,13 +1021,22 @@ suppport||support
|
||||||
supress||suppress
|
supress||suppress
|
||||||
surpresses||suppresses
|
surpresses||suppresses
|
||||||
susbsystem||subsystem
|
susbsystem||subsystem
|
||||||
|
suspeneded||suspended
|
||||||
suspicously||suspiciously
|
suspicously||suspiciously
|
||||||
swaping||swapping
|
swaping||swapping
|
||||||
switchs||switches
|
switchs||switches
|
||||||
|
swith||switch
|
||||||
|
swithable||switchable
|
||||||
|
swithc||switch
|
||||||
|
swithced||switched
|
||||||
|
swithcing||switching
|
||||||
|
swithed||switched
|
||||||
|
swithing||switching
|
||||||
symetric||symmetric
|
symetric||symmetric
|
||||||
synax||syntax
|
synax||syntax
|
||||||
synchonized||synchronized
|
synchonized||synchronized
|
||||||
syncronize||synchronize
|
syncronize||synchronize
|
||||||
|
syncronized||synchronized
|
||||||
syncronizing||synchronizing
|
syncronizing||synchronizing
|
||||||
syncronus||synchronous
|
syncronus||synchronous
|
||||||
syste||system
|
syste||system
|
||||||
|
@ -979,6 +1048,7 @@ targetting||targeting
|
||||||
teh||the
|
teh||the
|
||||||
temorary||temporary
|
temorary||temporary
|
||||||
temproarily||temporarily
|
temproarily||temporarily
|
||||||
|
therfore||therefore
|
||||||
thier||their
|
thier||their
|
||||||
threds||threads
|
threds||threads
|
||||||
threshhold||threshold
|
threshhold||threshold
|
||||||
|
@ -992,7 +1062,7 @@ tramsmitted||transmitted
|
||||||
tramsmit||transmit
|
tramsmit||transmit
|
||||||
tranfer||transfer
|
tranfer||transfer
|
||||||
transciever||transceiver
|
transciever||transceiver
|
||||||
transferd||transferrd
|
transferd||transferred
|
||||||
transfered||transferred
|
transfered||transferred
|
||||||
transfering||transferring
|
transfering||transferring
|
||||||
transision||transition
|
transision||transition
|
||||||
|
@ -1006,22 +1076,31 @@ ture||true
|
||||||
tyep||type
|
tyep||type
|
||||||
udpate||update
|
udpate||update
|
||||||
uesd||used
|
uesd||used
|
||||||
|
uncommited||uncommitted
|
||||||
unconditionaly||unconditionally
|
unconditionaly||unconditionally
|
||||||
underun||underrun
|
underun||underrun
|
||||||
unecessary||unnecessary
|
unecessary||unnecessary
|
||||||
unexecpted||unexpected
|
unexecpted||unexpected
|
||||||
|
unexpcted||unexpected
|
||||||
unexpectd||unexpected
|
unexpectd||unexpected
|
||||||
unexpeted||unexpected
|
unexpeted||unexpected
|
||||||
|
unexpexted||unexpected
|
||||||
unfortunatelly||unfortunately
|
unfortunatelly||unfortunately
|
||||||
unifiy||unify
|
unifiy||unify
|
||||||
unintialized||uninitialized
|
unintialized||uninitialized
|
||||||
|
unkmown||unknown
|
||||||
unknonw||unknown
|
unknonw||unknown
|
||||||
unknow||unknown
|
unknow||unknown
|
||||||
unkown||unknown
|
unkown||unknown
|
||||||
|
unneded||unneeded
|
||||||
unneedingly||unnecessarily
|
unneedingly||unnecessarily
|
||||||
|
unnsupported||unsupported
|
||||||
|
unmached||unmatched
|
||||||
unresgister||unregister
|
unresgister||unregister
|
||||||
|
unrgesiter||unregister
|
||||||
unsinged||unsigned
|
unsinged||unsigned
|
||||||
unstabel||unstable
|
unstabel||unstable
|
||||||
|
unsolicitied||unsolicited
|
||||||
unsuccessfull||unsuccessful
|
unsuccessfull||unsuccessful
|
||||||
unsuported||unsupported
|
unsuported||unsupported
|
||||||
untill||until
|
untill||until
|
||||||
|
@ -1042,6 +1121,7 @@ vaid||valid
|
||||||
vaild||valid
|
vaild||valid
|
||||||
valide||valid
|
valide||valid
|
||||||
variantions||variations
|
variantions||variations
|
||||||
|
varible||variable
|
||||||
varient||variant
|
varient||variant
|
||||||
vaule||value
|
vaule||value
|
||||||
verbse||verbose
|
verbse||verbose
|
||||||
|
|
Loading…
Reference in New Issue