Use argv[0] to locate the server executable.

This commit is contained in:
Alexandre Julliard 2000-01-25 21:19:58 +00:00
parent 079fd72ca7
commit eafa391081
10 changed files with 28 additions and 23 deletions

View File

@ -199,7 +199,6 @@ test_pdbstuff()
int int
main(int argc, char * argv[]) main(int argc, char * argv[])
{ {
extern char * DEBUG_argv0;
SIGCONTEXT reg; SIGCONTEXT reg;
strcpy(vdv, "This is a test"); strcpy(vdv, "This is a test");
@ -207,7 +206,7 @@ main(int argc, char * argv[])
vvv.whatsup = 0; vvv.whatsup = 0;
vvv.flag3 = 0; vvv.flag3 = 0;
vvv.remain = 0x401; vvv.remain = 0x401;
DEBUG_argv0 = argv[0]; argv0 = argv[0];
xxx = (unsigned int*) &vvv; xxx = (unsigned int*) &vvv;
yyy = xxx + 5; yyy = xxx + 5;
xxx3[5] = 7; xxx3[5] = 7;

View File

@ -24,6 +24,7 @@
#define PATH_MAX _MAX_PATH #define PATH_MAX _MAX_PATH
#endif #endif
#include "options.h"
#include "debugger.h" #include "debugger.h"
#if defined(__svr4__) || defined(__sun) #if defined(__svr4__) || defined(__sun)
@ -70,10 +71,6 @@
#define N_EXCL 0xc2 #define N_EXCL 0xc2
#define N_RBRAC 0xe0 #define N_RBRAC 0xe0
/*
* Set so that we know the main executable name and path.
*/
char * DEBUG_argv0;
struct stab_nlist { struct stab_nlist {
union { union {
@ -1317,7 +1314,7 @@ int
DEBUG_ReadExecutableDbgInfo(void) DEBUG_ReadExecutableDbgInfo(void)
{ {
Elf32_Ehdr * ehdr; Elf32_Ehdr * ehdr;
char * exe_name; const char * exe_name;
Elf32_Dyn * dynpnt; Elf32_Dyn * dynpnt;
struct r_debug * dbg_hdr; struct r_debug * dbg_hdr;
struct link_map * lpnt = NULL; struct link_map * lpnt = NULL;
@ -1329,7 +1326,7 @@ DEBUG_ReadExecutableDbgInfo(void)
int rtn = FALSE; int rtn = FALSE;
int rowcount; int rowcount;
exe_name = DEBUG_argv0; exe_name = argv0;
/* /*
* Make sure we can stat and open this file. * Make sure we can stat and open this file.
@ -1426,7 +1423,7 @@ DEBUG_ReadExecutableDbgInfo(void)
int status; int status;
unsigned int stroff; unsigned int stroff;
exe_name = DEBUG_argv0; exe_name = argv0;
/* /*
* Make sure we can stat and open this file. * Make sure we can stat and open this file.

View File

@ -971,7 +971,7 @@ INT __cdecl CRTDLL_system(LPSTR x)
unsigned char *bp; unsigned char *bp;
int i; int i;
sprintf( buffer, "%s \"", Options.argv0 ); sprintf( buffer, "%s \"", argv0 );
bp = buffer + strlen(buffer); bp = buffer + strlen(buffer);
i = strlen(buffer) + strlen(x) +2; i = strlen(buffer) + strlen(x) +2;

View File

@ -58,7 +58,6 @@ struct options
char **argv; char **argv;
char * desktopGeometry; /* NULL when no desktop */ char * desktopGeometry; /* NULL when no desktop */
char * programName; /* To use when loading resources */ char * programName; /* To use when loading resources */
char * argv0; /* argv[0] of Wine process */
char *dllFlags; /* -dll flags (hack for Winelib support) */ char *dllFlags; /* -dll flags (hack for Winelib support) */
int usePrivateMap; int usePrivateMap;
int useFixedMap; int useFixedMap;
@ -81,6 +80,7 @@ struct options
}; };
extern struct options Options; extern struct options Options;
extern const char *argv0;
/* Profile functions */ /* Profile functions */

View File

@ -432,7 +432,7 @@ BOOL MZ_InitTask( LPDOSTASK lpDosTask )
/* now load dosmod */ /* now load dosmod */
/* check argv[0]-derived paths first, since the newest dosmod is most likely there /* check argv[0]-derived paths first, since the newest dosmod is most likely there
* (at least it was once for Andreas Mohr, so I decided to make it easier for him) */ * (at least it was once for Andreas Mohr, so I decided to make it easier for him) */
fpath=strrchr(strcpy(path,Options.argv0),'/'); fpath=strrchr(strcpy(path,argv0),'/');
if (fpath) { if (fpath) {
strcpy(fpath,"/dosmod"); strcpy(fpath,"/dosmod");
execl(path,fname,farg,NULL); execl(path,fname,farg,NULL);

View File

@ -58,6 +58,9 @@ DEFAULT_DEBUG_CHANNEL(server)
*/ */
BOOL MAIN_MainInit( int *argc, char *argv[] ) BOOL MAIN_MainInit( int *argc, char *argv[] )
{ {
/* store the program name */
argv0 = argv[0];
/* Create the initial process */ /* Create the initial process */
if (!PROCESS_Init()) return 0; if (!PROCESS_Init()) return 0;

View File

@ -84,7 +84,6 @@ struct options Options =
NULL, /* argv */ NULL, /* argv */
NULL, /* desktopGeometry */ NULL, /* desktopGeometry */
NULL, /* programName */ NULL, /* programName */
NULL, /* argv0 */
NULL, /* dllFlags */ NULL, /* dllFlags */
FALSE, /* usePrivateMap */ FALSE, /* usePrivateMap */
FALSE, /* useFixedMap */ FALSE, /* useFixedMap */
@ -107,7 +106,9 @@ struct options Options =
0 /* screenDepth */ 0 /* screenDepth */
}; };
static char szUsage[] = const char *argv0;
static const char szUsage[] =
"%s\n" "%s\n"
"Usage: %s [options] \"program_name [arguments]\"\n" "Usage: %s [options] \"program_name [arguments]\"\n"
"\n" "\n"
@ -737,7 +738,6 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
Options.argc = argc; Options.argc = argc;
Options.argv = argv; Options.argv = argv;
Options.programName = MAIN_GetProgramName( *argc, argv ); Options.programName = MAIN_GetProgramName( *argc, argv );
Options.argv0 = argv[0];
/* initialise Options.language to 0 to tell "no language choosen yet" */ /* initialise Options.language to 0 to tell "no language choosen yet" */
Options.language = 0; Options.language = 0;

View File

@ -107,13 +107,6 @@ void MAIN_EmulatorRun( void )
int main( int argc, char *argv[] ) int main( int argc, char *argv[] )
{ {
NE_MODULE *pModule; NE_MODULE *pModule;
extern char * DEBUG_argv0;
/*
* Save this so that the internal debugger can get a hold of it if
* it needs to.
*/
DEBUG_argv0 = argv[0];
/* Set up debugger hook */ /* Set up debugger hook */
EXC_SetDebugEventHook( wine_debugger ); EXC_SetDebugEventHook( wine_debugger );

View File

@ -307,9 +307,22 @@ static void start_server( const char *oldcwd )
if (pid == -1) fatal_perror( "fork" ); if (pid == -1) fatal_perror( "fork" );
if (!pid) if (!pid)
{ {
char *path, *p;
/* first try the installation dir */
execl( BINDIR "/wineserver", "wineserver", NULL ); execl( BINDIR "/wineserver", "wineserver", NULL );
if (oldcwd) chdir( oldcwd ); if (oldcwd) chdir( oldcwd );
/* now try the dir we were launched from */
path = xmalloc( strlen(argv0) + 20 );
if ((p = strrchr( strcpy( path, argv0 ), '/' )))
{
strcpy( p, "/wineserver" );
execl( path, "wineserver", NULL );
strcpy( p, "/server/wineserver" );
execl( path, "wineserver", NULL );
}
/* now try the path */
execlp( "wineserver", "wineserver", NULL ); execlp( "wineserver", "wineserver", NULL );
/* and finally the current dir */
execl( "./server/wineserver", "wineserver", NULL ); execl( "./server/wineserver", "wineserver", NULL );
fatal_error( "could not exec wineserver\n" ); fatal_error( "could not exec wineserver\n" );
} }

View File

@ -114,7 +114,7 @@ static void X11DRV_MONITOR_CreateDesktop(MONITOR *pMonitor)
wm_hints->flags = InputHint | StateHint; wm_hints->flags = InputHint | StateHint;
wm_hints->input = True; wm_hints->input = True;
wm_hints->initial_state = NormalState; wm_hints->initial_state = NormalState;
class_hints->res_name = Options.argv[0]; /* FIXME: Options.argv0 insteed? */ class_hints->res_name = argv0;
class_hints->res_class = "Wine"; class_hints->res_class = "Wine";
TSXStringListToTextProperty( &name, 1, &window_name ); TSXStringListToTextProperty( &name, 1, &window_name );