summaryrefslogtreecommitdiffstats
path: root/generic/tclIOCmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclIOCmd.c')
-rw-r--r--generic/tclIOCmd.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c
index f738b1a..27f156f 100644
--- a/generic/tclIOCmd.c
+++ b/generic/tclIOCmd.c
@@ -1324,11 +1324,11 @@ AcceptCallbackProc(
if (acceptCallbackPtr->interp != NULL) {
char portBuf[TCL_INTEGER_SPACE];
- char *script = acceptCallbackPtr->script;
+ Tcl_Obj *script = Tcl_NewStringObj(acceptCallbackPtr->script, -1);
Tcl_Interp *interp = acceptCallbackPtr->interp;
int result;
- Tcl_Preserve(script);
+ Tcl_IncrRefCount(script);
Tcl_Preserve(interp);
TclFormatInt(portBuf, port);
@@ -1341,8 +1341,12 @@ AcceptCallbackProc(
Tcl_RegisterChannel(NULL, chan);
- result = Tcl_VarEval(interp, script, " ", Tcl_GetChannelName(chan),
- " ", address, " ", portBuf, NULL);
+ result = Tcl_ListObjAppendElement(interp, script, Tcl_NewStringObj(Tcl_GetChannelName(chan), -1));
+ if (result == TCL_OK) {
+ Tcl_ListObjAppendElement(NULL, script, Tcl_NewStringObj(address, -1));
+ Tcl_ListObjAppendElement(NULL, script, Tcl_NewStringObj(portBuf, -1));
+ result = Tcl_EvalObjEx(interp, script, 0);
+ }
if (result != TCL_OK) {
Tcl_BackgroundException(interp, result);
Tcl_UnregisterChannel(interp, chan);
@@ -1356,7 +1360,7 @@ AcceptCallbackProc(
Tcl_UnregisterChannel(NULL, chan);
Tcl_Release(interp);
- Tcl_Release(script);
+ Tcl_DecrRefCount(script);
} else {
/*
* The interpreter has been deleted, so there is no useful way to use