- API files update
- Minor bug fixes
diff --git a/tools/winapi_check/win16/gdi.api b/tools/winapi_check/win16/gdi.api
index 52f7d56..8870e6c 100644
--- a/tools/winapi_check/win16/gdi.api
+++ b/tools/winapi_check/win16/gdi.api
@@ -12,6 +12,8 @@
int
%ptr
+
+ABORTPROC16
BITMAP16 *
BITMAPINFO *
BITMAPINFOHEADER *
diff --git a/tools/winapi_check/win16/user.api b/tools/winapi_check/win16/user.api
index 91f200c..224b358 100644
--- a/tools/winapi_check/win16/user.api
+++ b/tools/winapi_check/win16/user.api
@@ -54,6 +54,7 @@
WINDOWPLACEMENT16 *
WNDCLASS16 *
WNDCLASSEX16 *
+WNDPROC
WORD *
void *
diff --git a/tools/winapi_check/win32/gdi32.api b/tools/winapi_check/win32/gdi32.api
index 659f0d8..2997ff7 100644
--- a/tools/winapi_check/win32/gdi32.api
+++ b/tools/winapi_check/win32/gdi32.api
@@ -37,6 +37,7 @@
BITMAPINFO *
BITMAPINFOHEADER *
COLORADJUSTMENT *
+DCHOOKPROC
DEVMODEA *
DEVMODEW *
DOCINFOA *
diff --git a/tools/winapi_check/win32/kernel32.api b/tools/winapi_check/win32/kernel32.api
index 761a1a1..66b0b72 100644
--- a/tools/winapi_check/win32/kernel32.api
+++ b/tools/winapi_check/win32/kernel32.api
@@ -49,6 +49,7 @@
BOOL *
BY_HANDLE_FILE_INFORMATION *
+CHAR_INFO *
DWORD *
CALINFO_ENUMPROCA
CONTEXT *
diff --git a/tools/winapi_check/win32/msvcrt.api b/tools/winapi_check/win32/msvcrt.api
index 32e6398..db4e2dc 100644
--- a/tools/winapi_check/win32/msvcrt.api
+++ b/tools/winapi_check/win32/msvcrt.api
@@ -27,14 +27,16 @@
__non_rtti_object *
_HEAPINFO *
_INITTERMFUN *
+_JUMP_BUFFER *
_onexit_t
_onexit_t **
-LPDWORD *
MSVCRT_EXCEPTION_FRAME *
MSVCRT_FILE *
MSVCRT_compar_fn_t
MSVCRT_exception *
MSVCRT_fpos_t *
+MSVCRT_free_func
+MSVCRT_malloc_func
MSVCRT_matherr_func
MSVCRT_new_handler_func
MSVCRT_sig_handler_func
@@ -56,7 +58,8 @@
char ***
exception *
int *
-jmp_buf
+struct __EXCEPTION_FRAME *
+struct __EXCEPTION_FRAME **
struct _finddata_t *
struct _diskfree_t *
struct _stat *
diff --git a/tools/winapi_check/win32/ntdll.api b/tools/winapi_check/win32/ntdll.api
index f6ef31d..032a851 100644
--- a/tools/winapi_check/win32/ntdll.api
+++ b/tools/winapi_check/win32/ntdll.api
@@ -36,7 +36,6 @@
int
long
-size_t
unsigned int
unsigned long
@@ -69,6 +68,7 @@
PACL
PACL *
PBOOLEAN
+PCVOID
PDWORD
PEXCEPTION_FRAME
PEXCEPTION_RECORD
@@ -103,18 +103,17 @@
UNICODE_STRING *
VOID *
struct _TEB *
+union cptable *
void *
%ptr --extension
-EXCEPTION_FRAME **
GUID *
WCHAR *
WCHAR ***
char *
char ***
enum __DEBUG_CLASS
-union generic_request *
va_list
%str
diff --git a/tools/winapi_check/win32/shell32.api b/tools/winapi_check/win32/shell32.api
index 424733e..ca8d175 100644
--- a/tools/winapi_check/win32/shell32.api
+++ b/tools/winapi_check/win32/shell32.api
@@ -8,6 +8,7 @@
HDROP
HGLOBAL
HMENU
+HMODULE
HICON
HINSTANCE
HIMAGELIST
@@ -22,7 +23,6 @@
WORD
WPARAM
-
%long # --forbidden
int
@@ -32,6 +32,7 @@
CLSID *
DLLVERSIONINFO *
DWORD *
+FARPROC
HICON *
HIMAGELIST *
HWND *
diff --git a/tools/winapi_check/win32/shlwapi.api b/tools/winapi_check/win32/shlwapi.api
index 2dcd11b..fe395f8 100644
--- a/tools/winapi_check/win32/shlwapi.api
+++ b/tools/winapi_check/win32/shlwapi.api
@@ -15,8 +15,10 @@
HMODULE
HPALETTE
HRESULT
+HSHARED
HUSKEY
HWND
+LANGID
LPARAM
LRESULT
UCHAR
@@ -37,15 +39,19 @@
BOOL *
DLLVERSIONINFO *
HICON *
+IFACE_INDEX_TBL *
IStream *
ITEMIDLIST *
IUnknown *
+IUnknown **
LPBROWSEINFOW
-LPBYTE
LPCITEMIDLIST
LPCLSID
+LPCSTR *
LPCVOID
+LPCWSTR *
LPDWORD
+LPHWND
LPINT
LPITEMIDLIST
LPOPENFILENAMEW
@@ -57,7 +63,9 @@
LPUNKNOWN *
LPVOID
LPVOID *
+LPWORD
PHUSKEY
+PVOID
REFIID
REFGUID
SHFILEINFOW *
diff --git a/tools/winapi_check/win32/ttydrv.api b/tools/winapi_check/win32/ttydrv.api
index 6193ca5..1a4114f 100644
--- a/tools/winapi_check/win32/ttydrv.api
+++ b/tools/winapi_check/win32/ttydrv.api
@@ -5,7 +5,6 @@
COLORREF
DWORD
INT
-HANDLE
HDC
HBITMAP
HGDIOBJ
diff --git a/tools/winapi_check/win32/urlmon.api b/tools/winapi_check/win32/urlmon.api
index e38c1cf..2a6831d 100644
--- a/tools/winapi_check/win32/urlmon.api
+++ b/tools/winapi_check/win32/urlmon.api
@@ -8,8 +8,10 @@
%ptr
IBindCtx *
+IBindCtx **
IBindStatusCallback *
IBindStatusCallback **
+IEnumFORMATETC *
IMoniker *
IMoniker **
LPVOID *
diff --git a/tools/winapi_check/win32/user32.api b/tools/winapi_check/win32/user32.api
index 54d57b9..7459bc2 100644
--- a/tools/winapi_check/win32/user32.api
+++ b/tools/winapi_check/win32/user32.api
@@ -53,6 +53,7 @@
INT16
HANDLE16
HDRVR16
+HGLOBAL16
HMODULE16
HINSTANCE16
HTASK16
@@ -73,6 +74,7 @@
DRAWSTATEPROC
GRAYSTRINGPROC
HANDLE *
+HBRUSH *
HICON *
HKL *
HWND *
@@ -145,10 +147,6 @@
HOOKPROC16
WNDPROC16
-%ptr # --forbidden
-
-int *
-
%str
LPSTR
diff --git a/tools/winapi_check/win32/winedos.api b/tools/winapi_check/win32/winedos.api
index b036450..5af6fbc 100644
--- a/tools/winapi_check/win32/winedos.api
+++ b/tools/winapi_check/win32/winedos.api
@@ -1,22 +1,14 @@
%long
BOOL
-BYTE
+DWORD
HANDLE
-INT
UINT
-ULONG_PTR
-WORD
-
+int
%ptr
-CONTEXT86 *
-BYTE *
-DOSRELAY
-PAPCFUNC
-LPDOSTASK
-LPVOID
+DWORD *
%str
diff --git a/tools/winapi_check/win32/wininet.api b/tools/winapi_check/win32/wininet.api
index 1e16438..6069eb5 100644
--- a/tools/winapi_check/win32/wininet.api
+++ b/tools/winapi_check/win32/wininet.api
@@ -2,16 +2,19 @@
BOOL
DWORD
+FILETIME
HINTERNET
HRESULT
INTERNET_PORT
%ptr
+LPBYTE
LPCSTR *
LPCVOID
LPDWORD
LPINTERNET_BUFFERSA
+LPINTERNET_CACHE_ENTRY_INFOA
LPURL_COMPONENTSA
LPVOID
LPWIN32_FIND_DATAA
diff --git a/tools/winapi_check/winapi.pm b/tools/winapi_check/winapi.pm
index b7d32fe..6ccea49 100644
--- a/tools/winapi_check/winapi.pm
+++ b/tools/winapi_check/winapi.pm
@@ -237,16 +237,24 @@
my $ordinal;
if(/^(\d+|@)\s+
- (pascal|pascal16|stdcall|cdecl|register|interrupt|varargs)
- (?:\s+(?:-noimport|-norelay|-i386|-ret64))*\s+(\S+)\s*\(\s*(.*?)\s*\)\s*(\S+)$/x)
+ (pascal|pascal16|stdcall|cdecl|varargs)\s+
+ ((?:(?:-noimport|-norelay|-i386|-ret64|-register|-interrupt)\s+)*)(\S+)\s*\(\s*(.*?)\s*\)\s*(\S+)$/x)
{
my $calling_convention = $2;
- my $external_name = $3;
- my $arguments = $4;
- my $internal_name = $5;
-
+ my $flags = $3;
+ my $external_name = $4;
+ my $arguments = $5;
+ my $internal_name = $6;
+
$ordinal = $1;
+ $flags =~ s/\s+/ /g;
+
+ if($flags =~ /(?:-register|-interrupt)/) {
+ if($arguments) { $arguments .= " "; }
+ $arguments .= "ptr";
+ }
+
if(!$$function_internal_name{$external_name}) {
$$function_internal_name{$external_name} = $internal_name;
} else {
diff --git a/tools/winapi_check/winapi_local.pm b/tools/winapi_check/winapi_local.pm
index 7203693..2eda324 100644
--- a/tools/winapi_check/winapi_local.pm
+++ b/tools/winapi_check/winapi_local.pm
@@ -127,16 +127,7 @@
my $declared_calling_convention = $winapi->function_internal_calling_convention($internal_name);
my @declared_argument_kinds = split(/\s+/, $winapi->function_internal_arguments($internal_name));
- if($declared_calling_convention =~ /^register|interrupt$/) {
- push @declared_argument_kinds, "ptr";
- }
-
- if($declared_calling_convention =~ /^register|interupt$/ &&
- (($winapi->name eq "win32" && $implemented_calling_convention eq "stdcall") ||
- (($winapi->name eq "win16" && $implemented_calling_convention =~ /^pascal/))))
- {
- # correct
- } elsif($implemented_calling_convention ne $declared_calling_convention &&
+ if($implemented_calling_convention ne $declared_calling_convention &&
$implemented_calling_convention ne "asm" &&
!($declared_calling_convention =~ /^pascal/ && $forbidden_return_type) &&
!($implemented_calling_convention =~ /^cdecl|varargs$/ && $declared_calling_convention =~ /^cdecl|varargs$/))
@@ -178,7 +169,9 @@
my $type = $_;
my $kind = "unknown";
$winapi->type_used_in_module($type,$module);
- if(!defined($kind = $winapi->translate_argument($type))) {
+ if($type eq "CONTEXT86 *") {
+ $kind = "context86";
+ } elsif(!defined($kind = $winapi->translate_argument($type))) {
$output->write("no translation defined: " . $type . "\n");
} elsif(!$winapi->is_allowed_kind($kind) ||
!$winapi->allowed_type_in_module($type, $module)) {
@@ -211,7 +204,9 @@
$argument_types[$n] = "";
}
- if(!$winapi->is_allowed_kind($argument_kinds[$n]) ||
+ if($argument_kinds[$n] eq "context86") {
+ # Nothing
+ } elsif(!$winapi->is_allowed_kind($argument_kinds[$n]) ||
!$winapi->allowed_type_in_module($argument_types[$n], $module))
{
if($options->report_argument_forbidden($argument_types[$n])) {
diff --git a/tools/winapi_check/winapi_parser.pm b/tools/winapi_check/winapi_parser.pm
index 3ade82d..6c9195d 100644
--- a/tools/winapi_check/winapi_parser.pm
+++ b/tools/winapi_check/winapi_parser.pm
@@ -528,7 +528,7 @@
&$type_end([@names]);
} elsif(/typedef\s+
(?:(?:const\s+|enum\s+|long\s+|signed\s+|short\s+|struct\s+|union\s+|unsigned\s+)*?)
- (\w+)\s+
+ (\w+(?:\s*\*+\s*)?)\s+
(?:(\w+)\s*)?
\((?:(\w+)\s+)?\s*\*\s*(\w+)\s*\)\s*
(?:\(([^\)]*)\)|\[([^\]]*)\])\s*;/sx)