Display an error message if loading a Winelib app failed (suggested by

Francois Gouget).
This commit is contained in:
Alexandre Julliard 2000-12-03 03:17:41 +00:00
parent 99acd7dfa3
commit cc7aef32b7

View file

@ -361,7 +361,7 @@ static void start_process(void)
* *
* Try to open the Winelib app .so file based on argv[0] or WINEPRELOAD. * Try to open the Winelib app .so file based on argv[0] or WINEPRELOAD.
*/ */
void *open_winelib_app( const char *argv0 ) void *open_winelib_app( char *argv[] )
{ {
void *ret = NULL; void *ret = NULL;
char *tmp; char *tmp;
@ -369,22 +369,34 @@ void *open_winelib_app( const char *argv0 )
if ((name = getenv( "WINEPRELOAD" ))) if ((name = getenv( "WINEPRELOAD" )))
{ {
ret = wine_dll_load_main_exe( name, 0 ); if (!(ret = wine_dll_load_main_exe( name, 0 )))
{
MESSAGE( "%s: could not load '%s' as specified in the WINEPRELOAD environment variable\n",
argv[0], name );
ExitProcess(1);
}
} }
else else
{ {
/* if argv[0] is "wine", don't try to load anything */ /* if argv[0] is "wine", don't try to load anything */
if (!(name = strrchr( argv0, '/' ))) name = argv0; if (!(name = strrchr( argv[0], '/' ))) name = argv[0];
else name++; else name++;
if (!strcmp( name, "wine" )) return NULL; if (!strcmp( name, "wine" )) return NULL;
/* now try argv[0] with ".so" appended */ /* now try argv[0] with ".so" appended */
if ((tmp = HeapAlloc( GetProcessHeap(), 0, strlen(argv0) + 4 ))) if ((tmp = HeapAlloc( GetProcessHeap(), 0, strlen(argv[0]) + 4 )))
{ {
strcpy( tmp, argv0 ); strcpy( tmp, argv[0] );
strcat( tmp, ".so" ); strcat( tmp, ".so" );
/* search in PATH only if there was no '/' in argv[0] */ /* search in PATH only if there was no '/' in argv[0] */
ret = wine_dll_load_main_exe( tmp, (name == argv0) ); ret = wine_dll_load_main_exe( tmp, (name == argv[0]) );
if (!ret && !argv[1])
{
/* if no argv[1], this will be better than displaying usage */
MESSAGE( "%s: could not load library '%s' as Winelib application\n",
argv[0], tmp );
ExitProcess(1);
}
HeapFree( GetProcessHeap(), 0, tmp ); HeapFree( GetProcessHeap(), 0, tmp );
} }
} }
@ -403,7 +415,7 @@ void PROCESS_InitWine( int argc, char *argv[] )
/* Initialize everything */ /* Initialize everything */
if (!process_init( argv )) exit(1); if (!process_init( argv )) exit(1);
if (open_winelib_app( argv[0] )) goto found; /* try to open argv[0] as a winelib app */ if (open_winelib_app( argv )) goto found; /* try to open argv[0] as a winelib app */
main_exe_argv = ++argv; /* remove argv[0] (wine itself) */ main_exe_argv = ++argv; /* remove argv[0] (wine itself) */
@ -565,6 +577,7 @@ static char **build_envp( const char *env, const char *extra_env )
{ {
if (memcmp( p, "PATH=", 5 ) && if (memcmp( p, "PATH=", 5 ) &&
memcmp( p, "HOME=", 5 ) && memcmp( p, "HOME=", 5 ) &&
memcmp( p, "WINEPRELOAD=", 12 ) &&
memcmp( p, "WINEPREFIX=", 11 )) *envptr++ = (char *)p; memcmp( p, "WINEPREFIX=", 11 )) *envptr++ = (char *)p;
} }
*envptr = 0; *envptr = 0;