diff options
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r-- | generic/tclEncoding.c | 53 |
1 files changed, 21 insertions, 32 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index 9d00670..a42e883 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -1433,7 +1433,6 @@ Tcl_InitSubsystems(int flags, ...) va_list argList; int argc = 0; void **argv = NULL; - const char *argv0 = NULL; Tcl_Interp *interp = NULL; TclInitSubsystems(); @@ -1441,9 +1440,6 @@ Tcl_InitSubsystems(int flags, ...) if (flags & TCL_INIT_CREATE) { argc = va_arg(argList, int); argv = va_arg(argList, void **); - if (argv) { - argv0 = argv[0]; - } interp = Tcl_CreateInterp(); } if (flags & TCL_INIT_CUSTOM) { @@ -1455,38 +1451,31 @@ Tcl_InitSubsystems(int flags, ...) va_end(argList); TclpSetInitialEncodings(); - TclpFindExecutable(argv0); - if (flags&TCL_INIT_CREATE) { + TclpFindExecutable(argv ? argv[0] : NULL); + if ((flags&TCL_INIT_CREATE) && (--argc >= 0)) { Tcl_Obj *argvPtr; - Tcl_DString ds; - if (argv0) { - Tcl_ExternalToUtfDString(NULL, argv0, -1, &ds); - Tcl_SetVar2Ex(interp, "argv0", NULL, TclDStringToObj(&ds), - TCL_GLOBAL_ONLY); - } - if(--argc >= 0) { - Tcl_SetVar2Ex(interp, "argc", NULL, Tcl_NewIntObj(argc), - TCL_GLOBAL_ONLY); - argvPtr = Tcl_NewListObj(argc, NULL); - if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UTF8) { - while (argc--) { - Tcl_ListObjAppendElement(NULL, argvPtr, - Tcl_NewStringObj(*++argv, -1)); - } - } else if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UNICODE) { - while (argc--) { - Tcl_ListObjAppendElement(NULL, argvPtr, - Tcl_NewUnicodeObj(*++argv, -1)); - } - } else { - while (argc--) { - Tcl_ExternalToUtfDString(NULL, *++argv, -1, &ds); - Tcl_ListObjAppendElement(NULL, argvPtr, TclDStringToObj(&ds)); - } + Tcl_SetVar2Ex(interp, "argc", NULL, Tcl_NewIntObj(argc), TCL_GLOBAL_ONLY); + argvPtr = Tcl_NewListObj(argc, NULL); + if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UTF8) { + while (argc--) { + Tcl_ListObjAppendElement(NULL, argvPtr, + Tcl_NewStringObj(*++argv, -1)); + } + } else if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UNICODE) { + while (argc--) { + Tcl_ListObjAppendElement(NULL, argvPtr, + Tcl_NewUnicodeObj(*++argv, -1)); + } + } else { + Tcl_DString ds; + + while (argc--) { + Tcl_ExternalToUtfDString(NULL, *++argv, -1, &ds); + Tcl_ListObjAppendElement(NULL, argvPtr, TclDStringToObj(&ds)); } - Tcl_SetVar2Ex(interp, "argv", NULL, argvPtr, TCL_GLOBAL_ONLY); } + Tcl_SetVar2Ex(interp, "argv", NULL, argvPtr, TCL_GLOBAL_ONLY); } return interp; } |