Make dlopen_dll return an error immediately if the library exists but
dlopen() fails.
This commit is contained in:
parent
c2c8bf1bdd
commit
bc23ae6df3
|
@ -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
|
/* open a library for a given dll, searching in the dll path
|
||||||
* 'name' must be the Windows dll name (e.g. "kernel32.dll") */
|
* '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;
|
p = buffer + dll_path_maxlen - len;
|
||||||
memcpy( p, dll_paths[i], len );
|
memcpy( p, dll_paths[i], len );
|
||||||
if ((ret = wine_dlopen( p, RTLD_NOW, error, errorsize ))) break;
|
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 */
|
/* now try the default dlopen search path */
|
||||||
|
|
Loading…
Reference in New Issue