util/lint: update checkpatch & spelling.txt to upstream versions

- Update checkpatch.pl to version 0547fa58
(checkpatch: add 6 missing types to --list-types)
- Update spelling.txt to version d9f91f8
(scripts/spelling.txt: add a bunch more spelling mistakes)
- Fix an additional unescaped left brace in a regex - causes warnings
in new versions of perl.

Change-Id: Ic443099e90a46280f18d58799afc72d00dc83793
Signed-off-by: Martin Roth <gaumless@gmail.com>
Reviewed-on: https://review.coreboot.org/21581
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Chris Ching <chingcodes@chromium.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Martin Roth 2017-09-17 19:20:46 -06:00 committed by Martin Roth
parent 2785c118a6
commit 387dec815c
2 changed files with 311 additions and 116 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl -w #!/usr/bin/env perl
# (c) 2001, Dave Jones. (the file handling bit) # (c) 2001, Dave Jones. (the file handling bit)
# (c) 2005, Joel Schopp <jschopp@austin.ibm.com> (the ugly bit) # (c) 2005, Joel Schopp <jschopp@austin.ibm.com> (the ugly bit)
# (c) 2007,2008, Andy Whitcroft <apw@uk.ibm.com> (new conditions, test suite) # (c) 2007,2008, Andy Whitcroft <apw@uk.ibm.com> (new conditions, test suite)
@ -6,6 +6,7 @@
# Licensed under the terms of the GNU GPL License version 2 # Licensed under the terms of the GNU GPL License version 2
use strict; use strict;
use warnings;
use POSIX; use POSIX;
use File::Basename; use File::Basename;
use Cwd 'abs_path'; use Cwd 'abs_path';
@ -56,7 +57,8 @@ 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 $conststructsfile = "$D/const_structs.checkpatch";
my $color = 1; my $typedefsfile = "";
my $color = "auto";
my $allow_c99_comments = 1; my $allow_c99_comments = 1;
# For coreboot jenkins # For coreboot jenkins
@ -122,7 +124,9 @@ Options:
--codespell Use the codespell dictionary for spelling/typos --codespell Use the codespell dictionary for spelling/typos
(default:/usr/share/codespell/dictionary.txt) (default:/usr/share/codespell/dictionary.txt)
--codespellfile Use this codespell dictionary --codespellfile Use this codespell dictionary
--color Use colors when output is STDOUT (default: on) --typedefsfile Read additional types from this file
--color[=WHEN] Use colors 'always', 'never', or only when output
is a terminal ('auto'). Default is 'auto'.
-h, --help, --version display this help and exit -h, --help, --version display this help and exit
When FILE is - read standard input. When FILE is - read standard input.
@ -150,7 +154,8 @@ sub list_types {
close($script); close($script);
my @types = (); my @types = ();
for ($text =~ /\b(?:(?:CHK|WARN|ERROR)\s*\(\s*"([^"]+)")/g) { # Also catch when type or level is passed through a variable
for ($text =~ /(?:(?:\bCHK|\bWARN|\bERROR|&\{\$msg_level})\s*\(|\$msg_type\s*=)\s*"([^"]+)"/g) {
push (@types, $_); push (@types, $_);
} }
@types = sort(uniq(@types)); @types = sort(uniq(@types));
@ -188,6 +193,14 @@ if (-f $conf) {
unshift(@ARGV, @conf_args) if @conf_args; unshift(@ARGV, @conf_args) if @conf_args;
} }
# Perl's Getopt::Long allows options to take optional arguments after a space.
# Prevent --color by itself from consuming other arguments
foreach (@ARGV) {
if ($_ eq "--color" || $_ eq "-color") {
$_ = "--color=$color";
}
}
GetOptions( GetOptions(
'q|quiet+' => \$quiet, 'q|quiet+' => \$quiet,
'tree!' => \$tree, 'tree!' => \$tree,
@ -218,7 +231,10 @@ GetOptions(
'test-only=s' => \$tst_only, 'test-only=s' => \$tst_only,
'codespell!' => \$codespell, 'codespell!' => \$codespell,
'codespellfile=s' => \$codespellfile, 'codespellfile=s' => \$codespellfile,
'color!' => \$color, 'typedefsfile=s' => \$typedefsfile,
'color=s' => \$color,
'no-color' => \$color, #keep old behaviors of -nocolor
'nocolor' => \$color, #keep old behaviors of -nocolor
'h|help' => \$help, 'h|help' => \$help,
'version' => \$help 'version' => \$help
) or help(1); ) or help(1);
@ -244,6 +260,18 @@ if ($#ARGV < 0) {
push(@ARGV, '-'); push(@ARGV, '-');
} }
if ($color =~ /^[01]$/) {
$color = !$color;
} elsif ($color =~ /^always$/i) {
$color = 1;
} elsif ($color =~ /^never$/i) {
$color = 0;
} elsif ($color =~ /^auto$/i) {
$color = (-t STDOUT);
} else {
die "Invalid color mode: $color\n";
}
sub hash_save_array_words { sub hash_save_array_words {
my ($hashRef, $arrayRef) = @_; my ($hashRef, $arrayRef) = @_;
@ -639,9 +667,11 @@ 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 = ""; sub read_words {
if (open(my $conststructs, '<', $conststructsfile)) { my ($wordsRef, $file) = @_;
while (<$conststructs>) {
if (open(my $words, '<', $file)) {
while (<$words>) {
my $line = $_; my $line = $_;
$line =~ s/\s*\n?$//g; $line =~ s/\s*\n?$//g;
@ -650,18 +680,31 @@ if (open(my $conststructs, '<', $conststructsfile)) {
next if ($line =~ m/^\s*#/); next if ($line =~ m/^\s*#/);
next if ($line =~ m/^\s*$/); next if ($line =~ m/^\s*$/);
if ($line =~ /\s/) { if ($line =~ /\s/) {
print("$conststructsfile: '$line' invalid - ignored\n"); print("$file: '$line' invalid - ignored\n");
next; next;
} }
$const_structs .= '|' if ($const_structs ne ""); $$wordsRef .= '|' if ($$wordsRef ne "");
$const_structs .= $line; $$wordsRef .= $line;
} }
close($conststructsfile); close($file);
} else { return 1;
warn "No structs that should be const will be found - file '$conststructsfile': $!\n"; }
return 0;
} }
my $const_structs = "";
read_words(\$const_structs, $conststructsfile)
or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
my $typeOtherTypedefs = "";
if (length($typedefsfile)) {
read_words(\$typeOtherTypedefs, $typedefsfile)
or warn "No additional types will be considered - file '$typedefsfile': $!\n";
}
$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
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)";
@ -724,7 +767,7 @@ our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant|$String)};
our $declaration_macros = qr{(?x: our $declaration_macros = qr{(?x:
(?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,6}\s*\(| (?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,6}\s*\(|
(?:$Storage\s+)?LIST_HEAD\s*\(| (?:$Storage\s+)?[HLP]?LIST_HEAD\s*\(|
(?:$Storage\s+)?${Type}\s+uninitialized_var\s*\( (?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(
)}; )};
@ -858,6 +901,7 @@ sub git_commit_info {
# echo "commit $(cut -c 1-12,41-)" # echo "commit $(cut -c 1-12,41-)"
# done # done
} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) { } elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
$id = undef;
} else { } else {
$id = substr($lines[0], 0, 12); $id = substr($lines[0], 0, 12);
$desc = substr($lines[0], 41); $desc = substr($lines[0], 41);
@ -905,9 +949,8 @@ if ($git) {
} }
my $vname; my $vname;
for my $f (@ARGV) { for my $filename (@ARGV) {
my $FILE; my $FILE;
my ($filename) = ($f =~ /^(.*)$/);
if ($git) { if ($git) {
open($FILE, '-|', "git format-patch -M --stdout -1 $filename") || open($FILE, '-|', "git format-patch -M --stdout -1 $filename") ||
die "$P: $filename: git format-patch failed - $!\n"; die "$P: $filename: git format-patch failed - $!\n";
@ -1880,7 +1923,7 @@ sub report {
return 0; return 0;
} }
my $output = ''; my $output = '';
if (-t STDOUT && $color) { if ($color) {
if ($level eq 'ERROR') { if ($level eq 'ERROR') {
$output .= RED; $output .= RED;
} elsif ($level eq 'WARNING') { } elsif ($level eq 'WARNING') {
@ -1891,10 +1934,10 @@ sub report {
} }
$output .= $prefix . $level . ':'; $output .= $prefix . $level . ':';
if ($show_types) { if ($show_types) {
$output .= BLUE if (-t STDOUT && $color); $output .= BLUE if ($color);
$output .= "$type:"; $output .= "$type:";
} }
$output .= RESET if (-t STDOUT && $color); $output .= RESET if ($color);
$output .= ' ' . $msg . "\n"; $output .= ' ' . $msg . "\n";
if ($showfile) { if ($showfile) {
@ -2212,8 +2255,7 @@ sub process {
} }
#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;
@ -2222,12 +2264,6 @@ 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
@ -2298,7 +2334,8 @@ sub process {
#extract the line range in the file after the patch is applied #extract the line range in the file after the patch is applied
if (!$in_commit_log && if (!$in_commit_log &&
$line =~ /^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) { $line =~ /^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@(.*)/) {
my $context = $4;
$is_patch = 1; $is_patch = 1;
$first_line = $linenr + 1; $first_line = $linenr + 1;
$realline=$1-1; $realline=$1-1;
@ -2314,6 +2351,11 @@ sub process {
%suppress_whiletrailers = (); %suppress_whiletrailers = ();
%suppress_export = (); %suppress_export = ();
$suppress_statement = 0; $suppress_statement = 0;
if ($context =~ /\b(\w+)\s*\(/) {
$context_function = $1;
} else {
undef $context_function;
}
next; next;
# track the line number as we move through the hunk, note that # track the line number as we move through the hunk, note that
@ -2567,6 +2609,7 @@ 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 !~ /^\s*(?:Link|Patchwork|http|https|BugLink):/i &&
$line !~ /^This reverts commit [0-9a-f]{7,40}/ &&
($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i || ($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i && ($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i &&
$line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i && $line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i &&
@ -2615,7 +2658,8 @@ sub process {
($id, $description) = git_commit_info($orig_commit, ($id, $description) = git_commit_info($orig_commit,
$id, $orig_desc); $id, $orig_desc);
if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) { if (defined($id) &&
($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
ERROR("GIT_COMMIT_ID", ERROR("GIT_COMMIT_ID",
"Please use git commit description style 'commit <12+ chars of sha1> (\"<title line>\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr); "Please use git commit description style 'commit <12+ chars of sha1> (\"<title line>\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr);
} }
@ -2656,8 +2700,8 @@ sub process {
# Check if it's the start of a commit log # Check if it's the start of a commit log
# (not a header line and we haven't seen the patch filename) # (not a header line and we haven't seen the patch filename)
if ($in_header_lines && $realfile =~ /^$/ && if ($in_header_lines && $realfile =~ /^$/ &&
!($rawline =~ /^\s+\S/ || !($rawline =~ /^\s+(?:\S|$)/ ||
$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; $has_commit_log = 1;
@ -2699,9 +2743,9 @@ sub process {
my $typo_fix = $spelling_fix{lc($typo)}; my $typo_fix = $spelling_fix{lc($typo)};
$typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/); $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);
$typo_fix = uc($typo_fix) if ($typo =~ /^[A-Z]+$/); $typo_fix = uc($typo_fix) if ($typo =~ /^[A-Z]+$/);
my $msg_type = \&WARN; my $msg_level = \&WARN;
$msg_type = \&CHK if ($file); $msg_level = \&CHK if ($file);
if (&{$msg_type}("TYPO_SPELLING", if (&{$msg_level}("TYPO_SPELLING",
"'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) && "'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) &&
$fix) { $fix) {
$fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($typo)($|[^A-Za-z@])/$1$typo_fix$3/; $fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($typo)($|[^A-Za-z@])/$1$typo_fix$3/;
@ -2737,9 +2781,9 @@ sub process {
$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";
my $msg_type = \&ERROR; my $msg_level = \&ERROR;
$msg_type = \&CHK if ($file); $msg_level = \&CHK if ($file);
&{$msg_type}("FSF_MAILING_ADDRESS", &{$msg_level}("FSF_MAILING_ADDRESS",
"Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet) "Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet)
} }
@ -2785,11 +2829,15 @@ sub process {
#print "is_start<$is_start> is_end<$is_end> length<$length>\n"; #print "is_start<$is_start> is_end<$is_end> length<$length>\n";
} }
# discourage the addition of CONFIG_EXPERIMENTAL in Kconfig. # check for MAINTAINERS entries that don't have the right form
if ($realfile =~ /Kconfig/ && if ($realfile =~ /^MAINTAINERS$/ &&
$line =~ /.\s*depends on\s+.*\bEXPERIMENTAL\b/) { $rawline =~ /^\+[A-Z]:/ &&
WARN("CONFIG_EXPERIMENTAL", $rawline !~ /^\+[A-Z]:\t\S/) {
"Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n"); if (WARN("MAINTAINERS_STYLE",
"MAINTAINERS entries use one tab after TYPE:\n" . $herecurr) &&
$fix) {
$fixed[$fixlinenr] =~ s/^(\+[A-Z]):\s*/$1:\t/;
}
} }
# discourage the use of boolean for type definition attributes of Kconfig options # discourage the use of boolean for type definition attributes of Kconfig options
@ -2855,7 +2903,7 @@ sub process {
# #defines that are a single string # #defines that are a single string
# #
# There are 3 different line length message types: # There are 3 different line length message types:
# LONG_LINE_COMMENT a comment starts before but extends beyond $max_linelength # LONG_LINE_COMMENT a comment starts before but extends beyond $max_line_length
# LONG_LINE_STRING a string starts before but extends beyond $max_line_length # LONG_LINE_STRING a string starts before but extends beyond $max_line_length
# LONG_LINE all other lines longer than $max_line_length # LONG_LINE all other lines longer than $max_line_length
# #
@ -2973,7 +3021,7 @@ sub process {
# check multi-line statement indentation matches previous line # check multi-line statement indentation matches previous line
if ($^V && $^V ge 5.10.0 && if ($^V && $^V ge 5.10.0 &&
$prevline =~ /^\+([ \t]*)((?:$c90_Keywords(?:\s+if)\s*)|(?:$Declare\s*)?(?:$Ident|\(\s*\*\s*$Ident\s*\))\s*|$Ident\s*=\s*$Ident\s*)\(.*(\&\&|\|\||,)\s*$/) { $prevline =~ /^\+([ \t]*)((?:$c90_Keywords(?:\s+if)\s*)|(?:$Declare\s*)?(?:$Ident|\(\s*\*\s*$Ident\s*\))\s*|(?:\*\s*)*$Lval\s*=\s*$Ident\s*)\(.*(\&\&|\|\||,)\s*$/) {
$prevline =~ /^\+(\t*)(.*)$/; $prevline =~ /^\+(\t*)(.*)$/;
my $oldindent = $1; my $oldindent = $1;
my $rest = $2; my $rest = $2;
@ -3161,6 +3209,17 @@ sub process {
# check we are in a valid C source file if not then ignore this hunk # check we are in a valid C source file if not then ignore this hunk
next if ($realfile !~ /\.(h|c)$/); next if ($realfile !~ /\.(h|c)$/);
# check if this appears to be the start function declaration, save the name
if ($sline =~ /^\+\{\s*$/ &&
$prevline =~ /^\+(?:(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*)?($Ident)\(/) {
$context_function = $1;
}
# check if this appears to be the end of function declaration
if ($sline =~ /^\+\}\s*$/) {
undef $context_function;
}
# check indentation of any line with a bare else # check indentation of any line with a bare else
# (but not if it is a multiple line "if (foo) return bar; else return baz;") # (but not if it is a multiple line "if (foo) return bar; else return baz;")
# if the previous line is a break or return and is indented 1 tab more... # if the previous line is a break or return and is indented 1 tab more...
@ -3185,12 +3244,6 @@ sub process {
} }
} }
# discourage the addition of CONFIG_EXPERIMENTAL in #if(def).
if ($line =~ /^\+\s*\#\s*if.*\bCONFIG_EXPERIMENTAL\b/) {
WARN("CONFIG_EXPERIMENTAL",
"Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n");
}
# check for RCS/CVS revision markers # check for RCS/CVS revision markers
if ($rawline =~ /^\+.*\$(Revision|Log|Id)(?:\$|)/) { if ($rawline =~ /^\+.*\$(Revision|Log|Id)(?:\$|)/) {
WARN("CVS_KEYWORD", WARN("CVS_KEYWORD",
@ -3219,7 +3272,7 @@ sub process {
my ($stat, $cond, $line_nr_next, $remain_next, $off_next, my ($stat, $cond, $line_nr_next, $remain_next, $off_next,
$realline_next); $realline_next);
#print "LINE<$line>\n"; #print "LINE<$line>\n";
if ($linenr >= $suppress_statement && if ($linenr > $suppress_statement &&
$realcnt && $sline =~ /.\s*\S/) { $realcnt && $sline =~ /.\s*\S/) {
($stat, $cond, $line_nr_next, $remain_next, $off_next) = ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
ctx_statement_block($linenr, $realcnt, 0); ctx_statement_block($linenr, $realcnt, 0);
@ -3366,7 +3419,7 @@ sub process {
} }
# Check relative indent for conditionals and blocks. # Check relative indent for conditionals and blocks.
if ($line =~ /\b(?:(?:if|while|for|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) { if ($line =~ /\b(?:(?:if|while|for|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|(?:do|else)\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
($stat, $cond, $line_nr_next, $remain_next, $off_next) = ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
ctx_statement_block($linenr, $realcnt, 0) ctx_statement_block($linenr, $realcnt, 0)
if (!defined $stat); if (!defined $stat);
@ -3458,6 +3511,8 @@ sub process {
if ($check && $s ne '' && if ($check && $s ne '' &&
(($sindent % 8) != 0 || (($sindent % 8) != 0 ||
($sindent < $indent) || ($sindent < $indent) ||
($sindent == $indent &&
($s !~ /^\s*(?:\}|\{|else\b)/)) ||
($sindent > $indent + 8))) { ($sindent > $indent + 8))) {
WARN("SUSPECT_CODE_INDENT", WARN("SUSPECT_CODE_INDENT",
"suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n"); "suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
@ -3551,7 +3606,7 @@ sub process {
$fixedline =~ s/\s*=\s*$/ = {/; $fixedline =~ s/\s*=\s*$/ = {/;
fix_insert_line($fixlinenr, $fixedline); fix_insert_line($fixlinenr, $fixedline);
$fixedline = $line; $fixedline = $line;
$fixedline =~ s/^(.\s*){\s*/$1/; $fixedline =~ s/^(.\s*)\{\s*/$1/;
fix_insert_line($fixlinenr, $fixedline); fix_insert_line($fixlinenr, $fixedline);
} }
} }
@ -3783,9 +3838,9 @@ sub process {
# avoid BUG() or BUG_ON() # avoid BUG() or BUG_ON()
if ($line =~ /\b(?:BUG|BUG_ON)\b/) { if ($line =~ /\b(?:BUG|BUG_ON)\b/) {
my $msg_type = \&WARN; my $msg_level = \&WARN;
$msg_type = \&CHK if ($file); $msg_level = \&CHK if ($file);
&{$msg_type}("AVOID_BUG", &{$msg_level}("AVOID_BUG",
"Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON()\n" . $herecurr); "Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON()\n" . $herecurr);
} }
@ -3894,7 +3949,7 @@ sub process {
my $fixedline = rtrim($prevrawline) . " {"; my $fixedline = rtrim($prevrawline) . " {";
fix_insert_line($fixlinenr, $fixedline); fix_insert_line($fixlinenr, $fixedline);
$fixedline = $rawline; $fixedline = $rawline;
$fixedline =~ s/^(.\s*){\s*/$1\t/; $fixedline =~ s/^(.\s*)\{\s*/$1\t/;
if ($fixedline !~ /^\+\s*$/) { if ($fixedline !~ /^\+\s*$/) {
fix_insert_line($fixlinenr, $fixedline); fix_insert_line($fixlinenr, $fixedline);
} }
@ -4315,10 +4370,10 @@ sub process {
# messages are ERROR, but ?: are CHK # messages are ERROR, but ?: are CHK
if ($ok == 0) { if ($ok == 0) {
my $msg_type = \&ERROR; my $msg_level = \&ERROR;
$msg_type = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/); $msg_level = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/);
if (&{$msg_type}("SPACING", if (&{$msg_level}("SPACING",
"spaces required around that '$op' $at\n" . $hereptr)) { "spaces required around that '$op' $at\n" . $hereptr)) {
$good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " "; $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " ";
if (defined $fix_elements[$n + 2]) { if (defined $fix_elements[$n + 2]) {
@ -4384,7 +4439,8 @@ sub process {
if (ERROR("SPACING", if (ERROR("SPACING",
"space required before the open brace '{'\n" . $herecurr) && "space required before the open brace '{'\n" . $herecurr) &&
$fix) { $fix) {
$fixed[$fixlinenr] =~ s/^(\+.*(?:do|\))){/$1 {/; #coreboot - Open braces must be escaped in regex
$fixed[$fixlinenr] =~ s/^(\+.*(?:do|\)))\{/$1 \{/;
} }
} }
@ -4472,6 +4528,30 @@ sub process {
} }
} }
# check for unnecessary parentheses around comparisons in if uses
if ($^V && $^V ge 5.10.0 && defined($stat) &&
$stat =~ /(^.\s*if\s*($balanced_parens))/) {
my $if_stat = $1;
my $test = substr($2, 1, -1);
my $herectx;
while ($test =~ /(?:^|[^\w\&\!\~])+\s*\(\s*([\&\!\~]?\s*$Lval\s*(?:$Compare\s*$FuncArg)?)\s*\)/g) {
my $match = $1;
# avoid parentheses around potential macro args
next if ($match =~ /^\s*\w+\s*$/);
if (!defined($herectx)) {
$herectx = $here . "\n";
my $cnt = statement_rawlines($if_stat);
for (my $n = 0; $n < $cnt; $n++) {
my $rl = raw_line($linenr, $n);
$herectx .= $rl . "\n";
last if $rl =~ /^[ \+].*\{/;
}
}
CHK("UNNECESSARY_PARENTHESES",
"Unnecessary parentheses around '$match'\n" . $herectx);
}
}
#goto labels aren't indented, allow a single space however #goto labels aren't indented, allow a single space however
if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
!($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) { !($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) {
@ -4882,8 +4962,10 @@ sub process {
$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/)
{ {
if ($dstat =~ /^\s*if\b/) {
if ($dstat =~ /;/) { ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
"Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects\n" . "$herectx");
} elsif ($dstat =~ /;/) {
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE", ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
"Macros with multiple statements should be enclosed in a do - while loop\n" . "$herectx"); "Macros with multiple statements should be enclosed in a do - while loop\n" . "$herectx");
} else { } else {
@ -4914,17 +4996,17 @@ sub process {
foreach my $arg (@def_args) { foreach my $arg (@def_args) {
next if ($arg =~ /\.\.\./); next if ($arg =~ /\.\.\./);
next if ($arg =~ /^type$/i); next if ($arg =~ /^type$/i);
my $tmp = $define_stmt; my $tmp_stmt = $define_stmt;
$tmp =~ s/\b(typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g; $tmp_stmt =~ s/\b(typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
$tmp =~ s/\#+\s*$arg\b//g; $tmp_stmt =~ s/\#+\s*$arg\b//g;
$tmp =~ s/\b$arg\s*\#\#//g; $tmp_stmt =~ s/\b$arg\s*\#\#//g;
my $use_cnt = $tmp =~ s/\b$arg\b//g; my $use_cnt = $tmp_stmt =~ s/\b$arg\b//g;
if ($use_cnt > 1) { if ($use_cnt > 1) {
CHK("MACRO_ARG_REUSE", CHK("MACRO_ARG_REUSE",
"Macro argument reuse '$arg' - possible side-effects?\n" . "$herectx"); "Macro argument reuse '$arg' - possible side-effects?\n" . "$herectx");
} }
# check if any macro arguments may have other precedence issues # check if any macro arguments may have other precedence issues
if ($define_stmt =~ m/($Operators)?\s*\b$arg\b\s*($Operators)?/m && if ($tmp_stmt =~ m/($Operators)?\s*\b$arg\b\s*($Operators)?/m &&
((defined($1) && $1 ne ',') || ((defined($1) && $1 ne ',') ||
(defined($2) && $2 ne ','))) { (defined($2) && $2 ne ','))) {
CHK("MACRO_ARG_PRECEDENCE", CHK("MACRO_ARG_PRECEDENCE",
@ -5205,14 +5287,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 # 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 # This does not work very well for -f --file checking as it depends on patch
#depends on patch context providing the function name # context providing the function name or a single line form for in-file
# function declarations
if ($line =~ /^\+.*$String/ && if ($line =~ /^\+.*$String/ &&
defined($context_function) && defined($context_function) &&
get_quoted_string($line, $rawline) =~ /\b$context_function\b/) { get_quoted_string($line, $rawline) =~ /\b$context_function\b/ &&
length(get_quoted_string($line, $rawline)) != (length($context_function) + 2)) {
WARN("EMBEDDED_FUNCTION_NAME", WARN("EMBEDDED_FUNCTION_NAME",
"Prefer using \"%s\", __func__ to embedded function names\n" . $herecurr); "Prefer using '\"%s...\", __func__' to using '$context_function', this function's name, in a string\n" . $herecurr);
} }
# check for spaces before a quoted newline # check for spaces before a quoted newline
@ -5319,7 +5403,7 @@ sub process {
my ($s, $c) = ctx_statement_block($linenr - 3, $realcnt, 0); my ($s, $c) = ctx_statement_block($linenr - 3, $realcnt, 0);
# print("line: <$line>\nprevline: <$prevline>\ns: <$s>\nc: <$c>\n\n\n"); # print("line: <$line>\nprevline: <$prevline>\ns: <$s>\nc: <$c>\n\n\n");
if ($c =~ /(?:^|\n)[ \+]\s*(?:$Type\s*)?\Q$testval\E\s*=\s*(?:\([^\)]*\)\s*)?\s*(?:devm_)?(?:[kv][czm]alloc(?:_node|_array)?\b|kstrdup|(?:dev_)?alloc_skb)/) { if ($s =~ /(?:^|\n)[ \+]\s*(?:$Type\s*)?\Q$testval\E\s*=\s*(?:\([^\)]*\)\s*)?\s*(?:devm_)?(?:[kv][czm]alloc(?:_node|_array)?\b|kstrdup|kmemdup|(?:dev_)?alloc_skb)/) {
WARN("OOM_MESSAGE", WARN("OOM_MESSAGE",
"Possible unnecessary 'out of memory' message\n" . $hereprev); "Possible unnecessary 'out of memory' message\n" . $hereprev);
} }
@ -5542,34 +5626,24 @@ sub process {
} }
} }
# Check for expedited grace periods that interrupt non-idle non-nohz
# online CPUs. These expedited can therefore degrade real-time response
# if used carelessly, and should be avoided where not absolutely
# needed. It is always OK to use synchronize_rcu_expedited() and
# synchronize_sched_expedited() at boot time (before real-time applications
# start) and in error situations where real-time response is compromised in
# any case. Note that synchronize_srcu_expedited() does -not- interrupt
# other CPUs, so don't warn on uses of synchronize_srcu_expedited().
# Of course, nothing comes for free, and srcu_read_lock() and
# srcu_read_unlock() do contain full memory barriers in payment for
# synchronize_srcu_expedited() non-interruption properties.
if ($line =~ /\b(synchronize_rcu_expedited|synchronize_sched_expedited)\(/) {
WARN("EXPEDITED_RCU_GRACE_PERIOD",
"expedited RCU grace periods should be avoided where they can degrade real-time response\n" . $herecurr);
}
# check of hardware specific defines # check of hardware specific defines
if ($line =~ m@^.\s*\#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) { if ($line =~ m@^.\s*\#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) {
CHK("ARCH_DEFINES", CHK("ARCH_DEFINES",
"architecture specific defines should be avoided\n" . $herecurr); "architecture specific defines should be avoided\n" . $herecurr);
} }
# Check that the storage class is at the beginning of a declaration # check that the storage class is not after a type
# coreboot: skip complaint about our '#define asmlinkage' lines if ($line =~ /\b($Type)\s+($Storage)\b/) {
if ($line =~ /\b$Storage\b/ && $line !~ /^.\s*$Storage\b/ && $line !~ /^.\s*#\s*define\s+$Storage\b/) {
WARN("STORAGE_CLASS", WARN("STORAGE_CLASS",
"storage class should be at the beginning of the declaration\n" . $herecurr) "storage class '$2' should be located before type '$1'\n" . $herecurr);
}
# Check that the storage class is at the beginning of a declaration
if ($line =~ /\b$Storage\b/ &&
$line !~ /^.\s*$Storage/ &&
$line =~ /^.\s*(.+?)\$Storage\s/ &&
$1 !~ /[\,\)]\s*$/) {
WARN("STORAGE_CLASS",
"storage class should be at the beginning of the declaration\n" . $herecurr);
} }
# check the location of the inline attribute, that it is between # check the location of the inline attribute, that it is between
@ -5708,6 +5782,32 @@ sub process {
} }
} }
# check for vsprintf extension %p<foo> misuses
if ($^V && $^V ge 5.10.0 &&
defined $stat &&
$stat =~ /^\+(?![^\{]*\{\s*).*\b(\w+)\s*\(.*$String\s*,/s &&
$1 !~ /^_*volatile_*$/) {
my $bad_extension = "";
my $lc = $stat =~ tr@\n@@;
$lc = $lc + $linenr;
for (my $count = $linenr; $count <= $lc; $count++) {
my $fmt = get_quoted_string($lines[$count - 1], raw_line($count, 0));
$fmt =~ s/%%//g;
if ($fmt =~ /(\%[\*\d\.]*p(?![\WFfSsBKRraEhMmIiUDdgVCbGNO]).)/) {
$bad_extension = $1;
last;
}
}
if ($bad_extension ne "") {
my $stat_real = raw_line($linenr, 0);
for (my $count = $linenr + 1; $count <= $lc; $count++) {
$stat_real = $stat_real . "\n" . raw_line($count, 0);
}
WARN("VSPRINTF_POINTER_EXTENSION",
"Invalid vsprintf pointer extension '$bad_extension'\n" . "$here\n$stat_real\n");
}
}
# Check for misused memsets # Check for misused memsets
if ($^V && $^V ge 5.10.0 && if ($^V && $^V ge 5.10.0 &&
defined $stat && defined $stat &&
@ -5886,7 +5986,8 @@ 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 && # check for function declarations that have arguments without identifier names
if (defined $stat &&
$stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s && $stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&
$1 ne "void") { $1 ne "void") {
my $args = trim($1); my $args = trim($1);
@ -5899,6 +6000,29 @@ sub process {
} }
} }
# check for function definitions
if ($^V && $^V ge 5.10.0 &&
defined $stat &&
$stat =~ /^.\s*(?:$Storage\s+)?$Type\s*($Ident)\s*$balanced_parens\s*{/s) {
$context_function = $1;
# check for multiline function definition with misplaced open brace
my $ok = 0;
my $cnt = statement_rawlines($stat);
my $herectx = $here . "\n";
for (my $n = 0; $n < $cnt; $n++) {
my $rl = raw_line($linenr, $n);
$herectx .= $rl . "\n";
$ok = 1 if ($rl =~ /^[ \+]\{/);
$ok = 1 if ($rl =~ /\{/ && $n == 0);
last if $rl =~ /^[ \+].*\{/;
}
if (!$ok) {
ERROR("OPEN_BRACE",
"open brace '{' following function definitions go on the next line\n" . $herectx);
}
}
# checks for new __setup's # checks for new __setup's
if ($rawline =~ /\b__setup\("([^"]*)"/) { if ($rawline =~ /\b__setup\("([^"]*)"/) {
my $name = $1; my $name = $1;
@ -5925,7 +6049,8 @@ sub process {
# check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc # check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc
if ($^V && $^V ge 5.10.0 && if ($^V && $^V ge 5.10.0 &&
$line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)\s*,/) { defined $stat &&
$stat =~ /^\+\s*($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)\s*,/) {
my $oldfunc = $3; my $oldfunc = $3;
my $a1 = $4; my $a1 = $4;
my $a2 = $10; my $a2 = $10;
@ -5939,11 +6064,17 @@ sub process {
} }
if ($r1 !~ /^sizeof\b/ && $r2 =~ /^sizeof\s*\S/ && if ($r1 !~ /^sizeof\b/ && $r2 =~ /^sizeof\s*\S/ &&
!($r1 =~ /^$Constant$/ || $r1 =~ /^[A-Z_][A-Z0-9_]*$/)) { !($r1 =~ /^$Constant$/ || $r1 =~ /^[A-Z_][A-Z0-9_]*$/)) {
my $ctx = '';
my $herectx = $here . "\n";
my $cnt = statement_rawlines($stat);
for (my $n = 0; $n < $cnt; $n++) {
$herectx .= raw_line($linenr, $n) . "\n";
}
if (WARN("ALLOC_WITH_MULTIPLY", if (WARN("ALLOC_WITH_MULTIPLY",
"Prefer $newfunc over $oldfunc with multiply\n" . $herecurr) && "Prefer $newfunc over $oldfunc with multiply\n" . $herectx) &&
$cnt == 1 &&
$fix) { $fix) {
$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; $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;
} }
} }
} }
@ -6098,11 +6229,11 @@ 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)
# and avoid what seem like struct definitions 'struct foo {'
if ($line !~ /\bconst\b/ && if ($line !~ /\bconst\b/ &&
$line =~ /\bstruct\s+($const_structs)\b/) { $line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/) {
WARN("CONST_STRUCT", WARN("CONST_STRUCT",
"struct $1 should normally be const\n" . "struct $1 should normally be const\n" . $herecurr);
$herecurr);
} }
# use of NR_CPUS is usually wrong # use of NR_CPUS is usually wrong

View File

@ -46,12 +46,15 @@ ackowledge||acknowledge
ackowledged||acknowledged ackowledged||acknowledged
acording||according acording||according
activete||activate activete||activate
actived||activated
actualy||actually
acumulating||accumulating acumulating||accumulating
acumulator||accumulator acumulator||accumulator
adapater||adapter adapater||adapter
addional||additional addional||additional
additionaly||additionally additionaly||additionally
addres||address addres||address
adddress||address
addreses||addresses addreses||addresses
addresss||address addresss||address
aditional||additional aditional||additional
@ -76,6 +79,8 @@ algorritm||algorithm
aligment||alignment aligment||alignment
alignement||alignment alignement||alignment
allign||align allign||align
alligned||aligned
allocatote||allocate
allocatrd||allocated allocatrd||allocated
allocte||allocate allocte||allocate
allpication||application allpication||application
@ -126,6 +131,7 @@ arraival||arrival
artifical||artificial artifical||artificial
artillary||artillery artillary||artillery
asign||assign asign||assign
asser||assert
assertation||assertion assertation||assertion
assiged||assigned assiged||assigned
assigment||assignment assigment||assignment
@ -141,9 +147,11 @@ asycronous||asynchronous
asynchnous||asynchronous asynchnous||asynchronous
atomatically||automatically atomatically||automatically
atomicly||atomically atomicly||atomically
atempt||attempt
attachement||attachment attachement||attachment
attched||attached attched||attached
attemps||attempts attemps||attempts
attemping||attempting
attruibutes||attributes attruibutes||attributes
authentification||authentication authentification||authentication
automaticaly||automatically automaticaly||automatically
@ -174,6 +182,7 @@ bakup||backup
baloon||balloon baloon||balloon
baloons||balloons baloons||balloons
bandwith||bandwidth bandwith||bandwidth
banlance||balance
batery||battery batery||battery
beacuse||because beacuse||because
becasue||because becasue||because
@ -199,9 +208,11 @@ callibration||calibration
calucate||calculate calucate||calculate
calulate||calculate calulate||calculate
cancelation||cancellation cancelation||cancellation
cancle||cancel
capabilites||capabilities capabilites||capabilities
capabitilies||capabilities capabitilies||capabilities
capatibilities||capabilities capatibilities||capabilities
capapbilities||capabilities
carefuly||carefully carefuly||carefully
cariage||carriage cariage||carriage
catagory||category catagory||category
@ -210,6 +221,7 @@ challange||challenge
challanges||challenges challanges||challenges
chanell||channel chanell||channel
changable||changeable changable||changeable
chanined||chained
channle||channel channle||channel
channnel||channel channnel||channel
charachter||character charachter||character
@ -235,6 +247,7 @@ claread||cleared
clared||cleared clared||cleared
closeing||closing closeing||closing
clustred||clustered clustred||clustered
coexistance||coexistence
collapsable||collapsible collapsable||collapsible
colorfull||colorful colorfull||colorful
comand||command comand||command
@ -263,6 +276,7 @@ completition||completion
completly||completely completly||completely
complient||compliant complient||compliant
componnents||components componnents||components
compoment||component
compres||compress compres||compress
compresion||compression compresion||compression
comression||compression comression||compression
@ -270,6 +284,7 @@ comunication||communication
conbination||combination conbination||combination
conditionaly||conditionally conditionaly||conditionally
conected||connected conected||connected
connecetd||connected
configuartion||configuration configuartion||configuration
configuratoin||configuration configuratoin||configuration
configuraton||configuration configuraton||configuration
@ -291,11 +306,14 @@ continous||continuous
continously||continuously continously||continuously
continueing||continuing continueing||continuing
contraints||constraints contraints||constraints
contol||control
contoller||controller
controled||controlled controled||controlled
controler||controller controler||controller
controll||control controll||control
contruction||construction contruction||construction
contry||country contry||country
conuntry||country
convertion||conversion convertion||conversion
convertor||converter convertor||converter
convienient||convenient convienient||convenient
@ -305,16 +323,19 @@ correponding||corresponding
correponds||corresponds correponds||corresponds
correspoding||corresponding correspoding||corresponding
cotrol||control cotrol||control
cound||could
couter||counter couter||counter
coutner||counter coutner||counter
cryptocraphic||cryptographic cryptocraphic||cryptographic
cunter||counter cunter||counter
curently||currently curently||currently
cylic||cyclic
dafault||default dafault||default
deafult||default deafult||default
deamon||daemon deamon||daemon
decompres||decompress decompres||decompress
decription||description decription||description
dectected||detected
defailt||default defailt||default
defferred||deferred defferred||deferred
definate||definite definate||definite
@ -332,6 +353,8 @@ delare||declare
delares||declares delares||declares
delaring||declaring delaring||declaring
delemiter||delimiter delemiter||delimiter
demodualtor||demodulator
demension||dimension
dependancies||dependencies dependancies||dependencies
dependancy||dependency dependancy||dependency
dependant||dependent dependant||dependent
@ -346,11 +369,13 @@ descritptor||descriptor
desctiptor||descriptor desctiptor||descriptor
desriptor||descriptor desriptor||descriptor
desriptors||descriptors desriptors||descriptors
destionation||destination
destory||destroy destory||destroy
destoryed||destroyed destoryed||destroyed
destorys||destroys destorys||destroys
destroied||destroyed destroied||destroyed
detabase||database detabase||database
deteced||detected
develope||develop develope||develop
developement||development developement||development
developped||developed developped||developed
@ -365,6 +390,8 @@ dictionnary||dictionary
didnt||didn't didnt||didn't
diferent||different diferent||different
differrence||difference differrence||difference
diffrent||different
diffrentiate||differentiate
difinition||definition difinition||definition
diplay||display diplay||display
direectly||directly direectly||directly
@ -398,6 +425,7 @@ efective||effective
efficently||efficiently efficently||efficiently
ehther||ether ehther||ether
eigth||eight eigth||eight
elementry||elementary
eletronic||electronic eletronic||electronic
embeded||embedded embeded||embedded
enabledi||enabled enabledi||enabled
@ -405,9 +433,11 @@ enchanced||enhanced
encorporating||incorporating encorporating||incorporating
encrupted||encrypted encrupted||encrypted
encrypiton||encryption encrypiton||encryption
encryptio||encryption
endianess||endianness endianess||endianness
enhaced||enhanced enhaced||enhanced
enlightnment||enlightenment enlightnment||enlightenment
entrys||entries
enocded||encoded enocded||encoded
enterily||entirely enterily||entirely
enviroiment||environment enviroiment||environment
@ -425,6 +455,7 @@ etsbalishment||establishment
excecutable||executable excecutable||executable
exceded||exceeded exceded||exceeded
excellant||excellent excellant||excellent
exeed||exceed
existance||existence existance||existence
existant||existent existant||existent
exixt||exist exixt||exist
@ -443,6 +474,7 @@ extened||extended
extensability||extensibility extensability||extensibility
extention||extension extention||extension
extracter||extractor extracter||extractor
falied||failed
faild||failed faild||failed
faill||fail faill||fail
failied||failed failied||failed
@ -452,6 +484,7 @@ failuer||failure
faireness||fairness faireness||fairness
falied||failed falied||failed
faliure||failure faliure||failure
fallbck||fallback
familar||familiar familar||familiar
fatser||faster fatser||faster
feauture||feature feauture||feature
@ -492,6 +525,7 @@ futhermore||furthermore
futrue||future futrue||future
gaurenteed||guaranteed gaurenteed||guaranteed
generiously||generously generiously||generously
genereate||generate
genric||generic genric||generic
globel||global globel||global
grabing||grabbing grabing||grabbing
@ -513,8 +547,10 @@ hierachy||hierarchy
hierarchie||hierarchy hierarchie||hierarchy
howver||however howver||however
hsould||should hsould||should
hypervior||hypervisor
hypter||hyper hypter||hyper
identidier||identifier identidier||identifier
iligal||illegal
illigal||illegal illigal||illegal
imblance||imbalance imblance||imbalance
immeadiately||immediately immeadiately||immediately
@ -546,6 +582,7 @@ independant||independent
independantly||independently independantly||independently
independed||independent independed||independent
indiate||indicate indiate||indicate
indicat||indicate
inexpect||inexpected inexpect||inexpected
infomation||information infomation||information
informatiom||information informatiom||information
@ -590,6 +627,9 @@ interruptted||interrupted
interupted||interrupted interupted||interrupted
interupt||interrupt interupt||interrupt
intial||initial intial||initial
intialisation||initialisation
intialised||initialised
intialise||initialise
intialization||initialization intialization||initialization
intialized||initialized intialized||initialized
intialize||initialize intialize||initialize
@ -600,6 +640,7 @@ intuative||intuitive
invaid||invalid invaid||invalid
invalde||invalid invalde||invalid
invalide||invalid invalide||invalid
invalud||invalid
invididual||individual invididual||individual
invokation||invocation invokation||invocation
invokations||invocations invokations||invocations
@ -660,18 +701,26 @@ messags||messages
messgaes||messages messgaes||messages
messsage||message messsage||message
messsages||messages messsages||messages
micropone||microphone
microprocesspr||microprocessor microprocesspr||microprocessor
milliseonds||milliseconds milliseonds||milliseconds
minium||minimum minium||minimum
minimam||minimum
minumum||minimum minumum||minimum
misalinged||misaligned
miscelleneous||miscellaneous miscelleneous||miscellaneous
misformed||malformed misformed||malformed
mispelled||misspelled mispelled||misspelled
mispelt||misspelt mispelt||misspelt
mising||missing
missmanaged||mismanaged
missmatch||mismatch
miximum||maximum miximum||maximum
mmnemonic||mnemonic mmnemonic||mnemonic
mnay||many mnay||many
modulues||modules modulues||modules
momery||memory
memomry||memory
monochorome||monochrome monochorome||monochrome
monochromo||monochrome monochromo||monochrome
monocrome||monochrome monocrome||monochrome
@ -772,6 +821,7 @@ permissons||permissions
peroid||period peroid||period
persistance||persistence persistance||persistence
persistant||persistent persistant||persistent
plalform||platform
platfrom||platform platfrom||platform
plattform||platform plattform||platform
pleaes||please pleaes||please
@ -784,6 +834,7 @@ posible||possible
positon||position positon||position
possibilites||possibilities possibilites||possibilities
powerfull||powerful powerfull||powerful
preapre||prepare
preceeded||preceded preceeded||preceded
preceeding||preceding preceeding||preceding
preceed||precede preceed||precede
@ -842,6 +893,7 @@ psuedo||pseudo
psychadelic||psychedelic psychadelic||psychedelic
pwoer||power pwoer||power
quering||querying quering||querying
randomally||randomly
raoming||roaming raoming||roaming
reasearcher||researcher reasearcher||researcher
reasearchers||researchers reasearchers||researchers
@ -869,8 +921,10 @@ refernnce||reference
refrence||reference refrence||reference
registerd||registered registerd||registered
registeresd||registered registeresd||registered
registerred||registered
registes||registers registes||registers
registraration||registration registraration||registration
regsiter||register
regster||register regster||register
regualar||regular regualar||regular
reguator||regulator reguator||regulator
@ -888,6 +942,7 @@ replys||replies
reponse||response reponse||response
representaion||representation representaion||representation
reqeust||request reqeust||request
requestied||requested
requiere||require requiere||require
requirment||requirement requirment||requirement
requred||required requred||required
@ -895,6 +950,7 @@ requried||required
requst||request requst||request
reseting||resetting reseting||resetting
resizeable||resizable resizeable||resizable
resouce||resource
resouces||resources resouces||resources
resoures||resources resoures||resources
responce||response responce||response
@ -910,6 +966,7 @@ reudce||reduce
reuest||request reuest||request
reuqest||request reuqest||request
reutnred||returned reutnred||returned
revsion||revision
rmeoved||removed rmeoved||removed
rmeove||remove rmeove||remove
rmeoves||removes rmeoves||removes
@ -981,6 +1038,7 @@ spinlcok||spinlock
spinock||spinlock spinock||spinlock
splitted||split splitted||split
spreaded||spread spreaded||spread
spurrious||spurious
sructure||structure sructure||structure
stablilization||stabilization stablilization||stabilization
staically||statically staically||statically
@ -1013,6 +1071,7 @@ superseeded||superseded
suplied||supplied suplied||supplied
suported||supported suported||supported
suport||support suport||support
supportet||supported
suppored||supported suppored||supported
supportin||supporting supportin||supporting
suppoted||supported suppoted||supported
@ -1056,6 +1115,7 @@ throught||through
thses||these thses||these
tiggered||triggered tiggered||triggered
tipically||typically tipically||typically
timout||timeout
tmis||this tmis||this
torerable||tolerable torerable||tolerable
tramsmitted||transmitted tramsmitted||transmitted
@ -1068,6 +1128,7 @@ transfering||transferring
transision||transition transision||transition
transmittd||transmitted transmittd||transmitted
transormed||transformed transormed||transformed
trasfer||transfer
trasmission||transmission trasmission||transmission
treshold||threshold treshold||threshold
trigerring||triggering trigerring||triggering
@ -1081,6 +1142,7 @@ unconditionaly||unconditionally
underun||underrun underun||underrun
unecessary||unnecessary unecessary||unnecessary
unexecpted||unexpected unexecpted||unexpected
unexepected||unexpected
unexpcted||unexpected unexpcted||unexpected
unexpectd||unexpected unexpectd||unexpected
unexpeted||unexpected unexpeted||unexpected
@ -1096,6 +1158,7 @@ unneded||unneeded
unneedingly||unnecessarily unneedingly||unnecessarily
unnsupported||unsupported unnsupported||unsupported
unmached||unmatched unmached||unmatched
unregester||unregister
unresgister||unregister unresgister||unregister
unrgesiter||unregister unrgesiter||unregister
unsinged||unsigned unsinged||unsigned
@ -1134,6 +1197,7 @@ virtaul||virtual
virtiual||virtual virtiual||virtual
visiters||visitors visiters||visitors
vitual||virtual vitual||virtual
wakeus||wakeups
wating||waiting wating||waiting
wether||whether wether||whether
whataver||whatever whataver||whatever