diff options
Diffstat (limited to 'unix/tclUnixFile.c')
| -rw-r--r-- | unix/tclUnixFile.c | 41 | 
1 files changed, 23 insertions, 18 deletions
| diff --git a/unix/tclUnixFile.c b/unix/tclUnixFile.c index 842d1b6..421ea16 100644 --- a/unix/tclUnixFile.c +++ b/unix/tclUnixFile.c @@ -9,7 +9,7 @@   * See the file "license.terms" for information on usage and redistribution   * of this file, and for a DISCLAIMER OF ALL WARRANTIES.   * - * RCS: @(#) $Id: tclUnixFile.c,v 1.42 2004/10/07 14:50:23 vincentdarley Exp $ + * RCS: @(#) $Id: tclUnixFile.c,v 1.43 2004/11/30 19:34:51 dgp Exp $   */  #include "tclInt.h" @@ -42,7 +42,7 @@ static int NativeMatchType(CONST char* nativeName, Tcl_GlobTypeData *types);   *---------------------------------------------------------------------------   */ -char * +void  TclpFindExecutable(argv0)      CONST char *argv0;		/* The value of the application's argv[0]  				 * (native). */ @@ -50,13 +50,13 @@ TclpFindExecutable(argv0)      CONST char *name, *p;      Tcl_StatBuf statBuf;      int length; -    Tcl_DString buffer, nameString; +    Tcl_DString buffer, nameString, cwd;      if (argv0 == NULL) { -	return NULL; +	return;      }      if (tclFindExecutableSearchDone) { -	return tclNativeExecutableName; +	return;      }      tclFindExecutableSearchDone = 1; @@ -135,7 +135,7 @@ TclpFindExecutable(argv0)      goto done;      /* -     * If the name starts with "/" then just copy it to tclExecutableName. +     * If the name starts with "/" then just copy it to tclNativeExecutableName.       */  gotName: @@ -144,11 +144,9 @@ gotName:  #else      if (name[0] == '/')  {  #endif -	Tcl_ExternalToUtfDString(NULL, name, -1, &nameString);  	tclNativeExecutableName = (char *) -		ckalloc((unsigned) (Tcl_DStringLength(&nameString) + 1)); -	strcpy(tclNativeExecutableName, Tcl_DStringValue(&nameString)); -	Tcl_DStringFree(&nameString); +		ckalloc((unsigned int) strlen(name) + 1); +	strcpy(tclNativeExecutableName, name);  	goto done;      } @@ -162,22 +160,29 @@ gotName:  	name += 2;      } -    Tcl_ExternalToUtfDString(NULL, name, -1, &nameString); +    Tcl_DStringInit(&nameString); +    Tcl_DStringAppend(&nameString, name, -1); + +    TclpGetCwd(NULL, &cwd);      Tcl_DStringFree(&buffer); -    TclpGetCwd(NULL, &buffer); +    Tcl_UtfToExternalDString(NULL, Tcl_DStringValue(&cwd), +	    Tcl_DStringLength(&cwd), &buffer); +    if (Tcl_DStringValue(&cwd)[Tcl_DStringLength(&cwd) -1] != '/') { +	Tcl_DStringAppend(&buffer, "/", 1); +    } +    Tcl_DStringFree(&cwd); +    Tcl_DStringAppend(&buffer, Tcl_DStringValue(&nameString), +	    Tcl_DStringLength(&nameString)); +    Tcl_DStringFree(&nameString); -    length = Tcl_DStringLength(&buffer) + Tcl_DStringLength(&nameString) + 2; +    length = Tcl_DStringLength(&buffer) + 1;      tclNativeExecutableName = (char *) ckalloc((unsigned) length);      strcpy(tclNativeExecutableName, Tcl_DStringValue(&buffer)); -    tclNativeExecutableName[Tcl_DStringLength(&buffer)] = '/'; -    strcpy(tclNativeExecutableName + Tcl_DStringLength(&buffer) + 1, -	    Tcl_DStringValue(&nameString)); -    Tcl_DStringFree(&nameString);  done:      Tcl_DStringFree(&buffer); -    return tclNativeExecutableName; +    Tcl_GetNameOfExecutable();  }  /* | 
