Make dlopen_dll return an error immediately if the library exists but

dlopen() fails.
This commit is contained in:
Alexandre Julliard 2002-04-03 22:13:01 +00:00
parent c2c8bf1bdd
commit bc23ae6df3
1 changed files with 12 additions and 0 deletions

View File

@ -103,6 +103,13 @@ static void build_dll_path(void)
}
}
/* check if a given file can be opened */
inline static int file_exists( const char *name )
{
int fd = open( name, O_RDONLY );
if (fd != -1) close( fd );
return (fd != -1);
}
/* open a library for a given dll, searching in the dll path
* 'name' must be the Windows dll name (e.g. "kernel32.dll") */
@ -128,6 +135,11 @@ static void *dlopen_dll( const char *name, char *error, int errorsize )
p = buffer + dll_path_maxlen - len;
memcpy( p, dll_paths[i], len );
if ((ret = wine_dlopen( p, RTLD_NOW, error, errorsize ))) break;
if (file_exists( p )) /* exists but cannot be loaded, return the error */
{
free( buffer );
return NULL;
}
}
/* now try the default dlopen search path */