summaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2017-10-16 08:28:55 +1000
committerSteve Bennett <steveb@workware.net.au>2017-10-16 09:53:20 +1000
commit4be55f10c4d2071f493b9a1b60197c5e20f3203d (patch)
tree822791cf728825874e8a45d740fe180f8405fe13 /jim.c
parentb04d7cc4745a9fefc539ad9ee8888d2733811778 (diff)
jim: cmdPrivData needs to be saved and restored
If a C command invokes another C command (including indirectly), cmdPrivData was being changed but not restored
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/jim.c b/jim.c
index d0e47c0..dcf35e2 100644
--- a/jim.c
+++ b/jim.c
@@ -10132,6 +10132,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv)
{
int retcode;
Jim_Cmd *cmdPtr;
+ void *prevPrivData;
#if 0
printf("invoke");
@@ -10161,6 +10162,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv)
goto out;
}
interp->evalDepth++;
+ prevPrivData = interp->cmdPrivData;
/* Call it -- Make sure result is an empty object. */
Jim_SetEmptyResult(interp);
@@ -10171,6 +10173,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv)
interp->cmdPrivData = cmdPtr->u.native.privData;
retcode = cmdPtr->u.native.cmdProc(interp, objc, objv);
}
+ interp->cmdPrivData = prevPrivData;
interp->evalDepth--;
out: