- API files update. - Minor bug fixes.
diff --git a/tools/winapi_check/winapi_check b/tools/winapi_check/winapi_check index 528dab7..4be3150 100755 --- a/tools/winapi_check/winapi_check +++ b/tools/winapi_check/winapi_check
@@ -538,9 +538,10 @@ } else { $include = "$header"; } - } elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge - my $header2 = $1; - $include = "dlls/kernel/$header2"; + } elsif($header =~ /^(?:kernel_private\.h)$/) { # FIXME: Kludge + $include = "dlls/kernel/$header"; + } elsif($header =~ /^(?:gdi_private\.h)$/) { # FIXME: Kludge + $include = "dlls/gdi/$header"; } elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge $include = "dlls/ntdll/$header"; } elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge @@ -618,10 +619,14 @@ $include2info{$name}{used}++; } } - } elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge - my $header2 = $1; - $include2info{"dlls/kernel/$header2"}{used}++; - foreach my $name (keys(%{$include2info{"dlls/kernel/$header2"}{includes}})) { + } elsif($header =~ /^(?:kernel_private\.h)$/) { # FIXME: Kludge + $include2info{"dlls/kernel/$header"}{used}++; + foreach my $name (keys(%{$include2info{"dlls/kernel/$header"}{includes}})) { + $include2info{$name}{used}++; + } + } elsif($header =~ /^(?:gdi_private\.h)$/) { # FIXME: Kludge + $include2info{"dlls/gdi/$header"}{used}++; + foreach my $name (keys(%{$include2info{"dlls/gdi/$header"}{includes}})) { $include2info{$name}{used}++; } } elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge @@ -629,7 +634,6 @@ foreach my $name (keys(%{$include2info{"dlls/ntdll/$header"}{includes}})) { $include2info{$name}{used}++; } - } elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge $include2info{"dlls/user/$header"}{used}++; foreach my $name (keys(%{$include2info{"dlls/user/$header"}{includes}})) {
diff --git a/tools/winapi_check/winapi_documentation.pm b/tools/winapi_check/winapi_documentation.pm index edaf567..0e30135 100644 --- a/tools/winapi_check/winapi_documentation.pm +++ b/tools/winapi_check/winapi_documentation.pm
@@ -125,13 +125,20 @@ if(!$documentation_error && $options->documentation_wrong) { foreach (split(/\n/, $documentation)) { - if(/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) { + if (/^\s*\*\s*(\S+)\s*[\(\[]\s*(\w+(?:\.(?:DRV|VXD))?)\s*\.\s*([^\s\)\]]*)\s*[\)\]].*?$/) { my $external_name = $1; my $module = $2; my $ordinal = $3; - if(!$options->documentation_pedantic && $ordinal ne "@") { + if ($ordinal eq "@") { + # Nothing + } elsif ($ordinal =~ /^\d+$/) { $ordinal = int($ordinal); + } elsif ($ordinal eq "init") { + $ordinal = 0; + } else { + $output->write("documentation: $external_name (\U$module\E.$ordinal) wrong\n"); + next; } my $found = 0; @@ -156,7 +163,8 @@ } - if(!$found) { + + if (!$found && $external_name ne "DllMain" && $ordinal !~ /^0$/) { $output->write("documentation: $external_name (\U$module\E.$ordinal) wrong\n"); } }
diff --git a/tools/winapi_check/winapi_local.pm b/tools/winapi_check/winapi_local.pm index 6dd186a..336f573 100644 --- a/tools/winapi_check/winapi_local.pm +++ b/tools/winapi_check/winapi_local.pm
@@ -147,7 +147,7 @@ } } - my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name); + my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name) || ""; my @declared_argument_kinds = split(/\s+/, $winapi->function_internal_arguments($internal_name)); my $declared_register = 0; @@ -171,16 +171,22 @@ } if($declared_calling_convention eq "varargs") { - if($#argument_types != -1 && $argument_types[$#argument_types] eq "...") { + if ($#argument_types != -1 && + (($winapi->name eq "win32" && $argument_types[$#argument_types] eq "...") || + ($winapi->name eq "win16" && $argument_types[$#argument_types] eq "VA_LIST16"))) + { pop @argument_types; } else { - $output->write("function not implemented as vararg\n"); + $output->write("function not implemented as varargs\n"); } - } elsif($#argument_types != -1 && $argument_types[$#argument_types] eq "...") { - if($#argument_types == 0 || $winapi->name eq "win16") { + } elsif ($#argument_types != -1 && + (($winapi->name eq "win32" && $argument_types[$#argument_types] eq "...") || + ($winapi->name eq "win16" && $argument_types[$#argument_types] eq "VA_LIST16"))) + { + if($#argument_types == 0) { pop @argument_types; } else { - $output->write("function not declared as vararg\n"); + $output->write("function not declared as varargs\n"); } }
diff --git a/tools/winapi_check/winapi_parser.pm b/tools/winapi_check/winapi_parser.pm index 202d816..d280a00 100644 --- a/tools/winapi_check/winapi_parser.pm +++ b/tools/winapi_check/winapi_parser.pm
@@ -499,20 +499,29 @@ my @arguments32 = ("HWAVEOUT", $4); &$function_begin($documentation_line, $documentation, $function_line, "", "UINT16", "WINAPI", "waveOut" . $2 . "16", \@arguments16); - &$function_end($., ""); + &$function_end($function_line, ""); &$function_begin($documentation_line, $documentation, $function_line, "", "UINT", "WINAPI", "waveOut" . $2, \@arguments32); - &$function_end($., ""); + &$function_end($function_line, ""); } elsif($1 eq 2) { my @arguments16 = ("UINT16", $4); my @arguments32 = ("UINT", $4); &$function_begin($documentation_line, $documentation, $function_line, "", "UINT16", "WINAPI", "waveOut". $2 . "16", \@arguments16); - &$function_end($., ""); + &$function_end($function_line, ""); &$function_begin($documentation_line, $documentation, $function_line, "", "UINT", "WINAPI", "waveOut" . $2, \@arguments32); - &$function_end($., ""); + &$function_end($function_line, ""); } + } elsif(/DEFINE_THISCALL_WRAPPER\((\S*)\)/s) { + my @lines = split(/\n/, $&); + my $function_line = $. - scalar(@lines) + 1; + + $_ = $'; $again = 1; + + &$function_begin($documentation_line, $documentation, + $function_line, "", "void", "", "__thiscall_" . $1, \()); + &$function_end($function_line, ""); } elsif(/DEFINE_REGS_ENTRYPOINT_\d+\(\s*(\S*)\s*,\s*([^\s,\)]*).*?\)/s) { $_ = $'; $again = 1; $regs_entrypoints{$2} = $1;