From 4be55f10c4d2071f493b9a1b60197c5e20f3203d Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 16 Oct 2017 08:28:55 +1000 Subject: 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 --- jim.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'jim.c') 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: -- cgit v1.2.3