Alexandre Julliard : winebuild: Improved checks for missing forward entry point targets.
Alexandre Julliard
julliard at winehq.org
Fri Dec 7 11:01:47 CST 2007
Module: wine
Branch: master
Commit: e6fe7341f503b317eacd1380a7a1529e52c49c17
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e6fe7341f503b317eacd1380a7a1529e52c49c17
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Dec 6 21:22:34 2007 +0100
winebuild: Improved checks for missing forward entry point targets.
---
tools/winebuild/import.c | 55 +++++++++++++++++++++------------------------
1 files changed, 26 insertions(+), 29 deletions(-)
diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
index 4487921..a1fdbd0 100644
--- a/tools/winebuild/import.c
+++ b/tools/winebuild/import.c
@@ -424,39 +424,39 @@ static int check_unused( const struct import* imp, const DLLSPEC *spec )
}
/* check if a given forward does exist in one of the imported dlls */
-static void check_undefined_forward( DLLSPEC *spec, ORDDEF *odp )
+static void check_undefined_forwards( DLLSPEC *spec )
{
char *link_name, *api_name, *dll_name, *p;
- int i, found = 0;
+ int i, j;
- assert( odp->flags & FLAG_FORWARD );
+ for (i = 0; i < spec->nb_entry_points; i++)
+ {
+ ORDDEF *odp = &spec->entry_points[i];
- link_name = xstrdup( odp->link_name );
- p = strrchr( link_name, '.' );
- *p = 0;
- api_name = p + 1;
- dll_name = get_dll_name( link_name, NULL );
+ if (!(odp->flags & FLAG_FORWARD)) continue;
- for (i = 0; i < nb_imports; i++)
- {
- struct import *imp = dll_imports[i];
+ link_name = xstrdup( odp->link_name );
+ p = strrchr( link_name, '.' );
+ *p = 0;
+ api_name = p + 1;
+ dll_name = get_dll_name( link_name, NULL );
- if (!strcasecmp( imp->spec->file_name, dll_name ))
+ for (j = 0; j < nb_imports; j++)
{
- if (find_export( api_name, imp->exports, imp->nb_exports ))
- {
- found = 1;
- break;
- }
+ struct import *imp = dll_imports[j];
+
+ if (strcasecmp( imp->spec->file_name, dll_name )) continue;
+ if (!find_export( api_name, imp->exports, imp->nb_exports ))
+ warning( "%s:%d: forward '%s' not found in %s\n",
+ spec->src_name, odp->lineno, odp->link_name, imp->spec->file_name );
+ break;
}
+ if (j == nb_imports)
+ warning( "%s:%d: forward '%s' not found in the imported dll list\n",
+ spec->src_name, odp->lineno, odp->link_name );
+ free( link_name );
+ free( dll_name );
}
-
- free( link_name );
- free( dll_name );
-
- if (!found)
- warning( "%s:%d: forward '%s' not found in the imported dll list\n",
- spec->src_name, odp->lineno, odp->link_name );
}
/* flag the dll exports that link to an undefined symbol */
@@ -468,11 +468,7 @@ static void check_undefined_exports( DLLSPEC *spec )
{
ORDDEF *odp = &spec->entry_points[i];
if (odp->type == TYPE_STUB) continue;
- if (odp->flags & FLAG_FORWARD)
- {
- check_undefined_forward( spec, odp );
- continue;
- }
+ if (odp->flags & FLAG_FORWARD) continue;
if (find_name( odp->link_name, &undef_symbols ))
{
switch(odp->type)
@@ -597,6 +593,7 @@ int resolve_imports( DLLSPEC *spec )
ORDDEF *odp;
sort_names( &ignore_symbols );
+ check_undefined_forwards( spec );
for (i = 0; i < nb_imports; i++)
{
More information about the wine-cvs
mailing list