From 405b9175e62f3133e3e0811262ab863b70c7f1e7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 7 Mar 2018 19:35:00 +0000 Subject: Fix handling of "pkgIndex" file in "package files" command. This was broken as well, as result of NRE-enabling the "package" command. --- generic/tclPkg.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/generic/tclPkg.c b/generic/tclPkg.c index e8c2801..1e54aa7 100644 --- a/generic/tclPkg.c +++ b/generic/tclPkg.c @@ -733,18 +733,17 @@ SelectPackage(ClientData data[], Tcl_Interp *interp, int result) { Tcl_Preserve(versionToProvide); pkgPtr->clientData = versionToProvide; + + pkgFiles = TclInitPkgFiles(interp); + /* Push "ifneeded" package name in "tclPkgFiles" assocdata. */ + pkgName = ckalloc(sizeof(PkgName) + strlen(name)); + pkgName->nextPtr = pkgFiles->names; + strcpy(pkgName->name, name); + pkgFiles->names = pkgName; if (bestPtr->pkgIndex) { TclPkgFileSeen(interp, bestPtr->pkgIndex); } reqPtr->versionToProvide = versionToProvide; - - pkgFiles = TclInitPkgFiles(interp); - /* Push "ifneeded" package name in "tclPkgFiles" assocdata. */ - pkgName = ckalloc(sizeof(PkgName) + strlen(name)); - pkgName->nextPtr = pkgFiles->names; - strcpy(pkgName->name, name); - pkgFiles->names = pkgName; - Tcl_NRAddCallback(interp, SelectPackageFinal, reqPtr, INT2PTR(reqc), (void *)reqv, data[3]); Tcl_NREvalObj(interp, Tcl_NewStringObj(bestPtr->script, -1), TCL_EVAL_GLOBAL); } @@ -758,14 +757,12 @@ SelectPackageFinal(ClientData data[], Tcl_Interp *interp, int result) { Tcl_Obj **const reqv = data[2]; const char *name = reqPtr->name; char *versionToProvide = reqPtr->versionToProvide; - void *toBeRemoved; - PkgFiles *pkgFiles; - pkgFiles = TclInitPkgFiles(interp); /* Pop the "ifneeded" package name from "tclPkgFiles" assocdata*/ - toBeRemoved = pkgFiles->names; - pkgFiles->names = pkgFiles->names->nextPtr; - ckfree(toBeRemoved); + PkgFiles *pkgFiles = Tcl_GetAssocData(interp, "tclPkgFiles", NULL); + PkgName *pkgName = pkgFiles->names; + pkgFiles->names = pkgName->nextPtr; + ckfree(pkgName); reqPtr->pkgPtr = FindPackage(interp, name); if (result == TCL_OK) { -- cgit v0.12