From 87ae825bf89d76e9b68a2560691b787055de0691 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 8 Oct 2003 00:45:01 +0000 Subject: [PATCH] Get rid of the argv0 and full_argv0 global variables. --- dlls/kernel/process.c | 13 +++++-------- dlls/ntdll/server.c | 28 ++++++---------------------- include/options.h | 3 --- misc/options.c | 7 ++----- 4 files changed, 13 insertions(+), 38 deletions(-) diff --git a/dlls/kernel/process.c b/dlls/kernel/process.c index 22fe135db98..c0d8f1dd6b0 100644 --- a/dlls/kernel/process.c +++ b/dlls/kernel/process.c @@ -507,9 +507,6 @@ static BOOL process_init( char *argv[] ) setbuf(stderr,NULL); setlocale(LC_CTYPE,""); - /* store the program name */ - argv0 = argv[0]; - /* Fill the initial process structure */ current_process.threads = 1; current_process.running_threads = 1; @@ -967,14 +964,14 @@ static void exec_wine_binary( char **argv, char **envp ) execve( argv[0], argv, envp ); /* now try the path of argv0 of the current binary */ - if (!(argv[0] = malloc( strlen(full_argv0) + 6 ))) return; - if ((ptr = strrchr( full_argv0, '/' ))) + if ((path = wine_get_argv0_path())) { - memcpy( argv[0], full_argv0, ptr - full_argv0 ); - strcpy( argv[0] + (ptr - full_argv0), "/wine" ); + if (!(argv[0] = malloc( strlen(path) + sizeof("wine") ))) return; + strcpy( argv[0], path ); + strcat( argv[0], "wine" ); execve( argv[0], argv, envp ); + free( argv[0] ); } - free( argv[0] ); /* now search in the Unix path */ if ((path = getenv( "PATH" ))) diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index 223182325ab..a0379d7923d 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -55,7 +55,6 @@ #include "wine/library.h" #include "wine/server.h" #include "winerror.h" -#include "options.h" /* Some versions of glibc don't define this */ #ifndef SCM_RIGHTS @@ -450,6 +449,7 @@ static void start_server( const char *oldcwd ) { static int started; /* we only try once */ char *path, *p; + const char *argv0_path; if (!started) { int status; @@ -476,15 +476,13 @@ static void start_server( const char *oldcwd ) execl( BINDIR "/wineserver", "wineserver", NULL ); /* now try the dir we were launched from */ - if (full_argv0) + if ((argv0_path = wine_get_argv0_path())) { - if (!(path = malloc( strlen(full_argv0) + 20 ))) + if (!(path = malloc( strlen(argv0_path) + sizeof("wineserver") ))) fatal_error( "out of memory\n" ); - if ((p = strrchr( strcpy( path, full_argv0 ), '/' ))) - { - strcpy( p, "/wineserver" ); - execl( path, path, NULL ); - } + strcpy( path, argv0_path ); + strcat( path, "wineserver" ); + execl( path, path, NULL ); free(path); } @@ -622,20 +620,6 @@ static void server_init(void) break; } - /* if argv[0] is a relative path, make it absolute */ - full_argv0 = argv0; - if (oldcwd && argv0[0] != '/' && strchr( argv0, '/' )) - { - char *new_argv0 = malloc( strlen(oldcwd) + strlen(argv0) + 2 ); - if (new_argv0) - { - strcpy( new_argv0, oldcwd ); - strcat( new_argv0, "/" ); - strcat( new_argv0, argv0 ); - full_argv0 = new_argv0; - } - } - /* connect to the server */ fd_socket = server_connect( oldcwd, wine_get_server_dir() ); diff --git a/include/options.h b/include/options.h index 36b541b641c..1e14ddbd31f 100644 --- a/include/options.h +++ b/include/options.h @@ -23,9 +23,6 @@ #include -extern const char *argv0; -extern const char *full_argv0; - extern void DECLSPEC_NORETURN OPTIONS_Usage(void); extern void OPTIONS_ParseOptions( char *argv[] ); diff --git a/misc/options.c b/misc/options.c index 48691a197a5..b799914f9c6 100644 --- a/misc/options.c +++ b/misc/options.c @@ -43,9 +43,6 @@ struct option_descr const char *usage; }; -const char *argv0; /* the original argv[0] */ -const char *full_argv0; /* the full path of argv[0] (if known) */ - static char *inherit_str; /* options to pass to child processes */ static void DECLSPEC_NORETURN out_of_memory(void); @@ -89,7 +86,7 @@ static void do_debugmsg( const char *arg ) { if (wine_dbg_parse_options( arg )) { - MESSAGE("%s: Syntax: --debugmsg [class]+xxx,... or -debugmsg [class]-xxx,...\n", argv0); + MESSAGE("wine: Syntax: --debugmsg [class]+xxx,... or -debugmsg [class]-xxx,...\n"); MESSAGE("Example: --debugmsg +all,warn-heap\n" " turn on all messages except warning heap messages\n"); MESSAGE("Available message classes: err, warn, fixme, trace\n\n"); @@ -216,7 +213,7 @@ void OPTIONS_Usage(void) { const struct option_descr *opt; MESSAGE( "%s\n\n", PACKAGE_STRING ); - MESSAGE( "Usage: %s [options] [--] program_name [arguments]\n", argv0 ); + MESSAGE( "Usage: wine [options] [--] program_name [arguments]\n" ); MESSAGE("The -- has to be used if you specify arguments (of the program)\n\n"); MESSAGE( "Options:\n" ); for (opt = option_table; opt->longname; opt++) MESSAGE( " %s\n", opt->usage );