diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-12-07 21:36:34 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-12-07 21:36:34 (GMT) |
commit | b3991b1dacaacb1ab86f2049e99279ca95dc09ef (patch) | |
tree | dcd12390410dc51d229dfdf8494038aa8c4e90b4 | |
parent | f21757bb59b183ee82e709542e8d741db5648e9a (diff) | |
parent | b2ff7f2e251e1bf049254d4db77ed648299d9012 (diff) | |
download | tcl-b3991b1dacaacb1ab86f2049e99279ca95dc09ef.zip tcl-b3991b1dacaacb1ab86f2049e99279ca95dc09ef.tar.gz tcl-b3991b1dacaacb1ab86f2049e99279ca95dc09ef.tar.bz2 |
only set tclStubsPtr if all version checks pass
-rw-r--r-- | generic/tclStubLib.c | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/generic/tclStubLib.c b/generic/tclStubLib.c index 0efaf50..5a122dd 100644 --- a/generic/tclStubLib.c +++ b/generic/tclStubLib.c @@ -11,15 +11,6 @@ * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -/* - * We need to ensure that we use the stub macros so that this file contains no - * references to any of the stub functions. This will make it possible to - * build an extension that references Tcl_InitStubs but doesn't end up - * including the rest of the stub functions. - */ - -#define USE_TCL_STUBS - #include "tclInt.h" MODULE_SCOPE const TclStubs *tclStubsPtr; @@ -72,15 +63,15 @@ static int isDigit(const int c) * *---------------------------------------------------------------------- */ - -MODULE_SCOPE const char * +#undef Tcl_InitStubs +const char * Tcl_InitStubs( Tcl_Interp *interp, const char *version, int exact) { const char *actualVersion = NULL; - ClientData pkgData = NULL; + const TclStubs *stubsPtr; /* * We can't optimize this check by caching tclStubsPtr because that @@ -88,12 +79,12 @@ Tcl_InitStubs( * times. [Bug 615304] */ - tclStubsPtr = HasStubSupport(interp); - if (!tclStubsPtr) { + stubsPtr = HasStubSupport(interp); + if (!stubsPtr) { return NULL; } - actualVersion = Tcl_PkgRequireEx(interp, "Tcl", version, 0, &pkgData); + actualVersion = stubsPtr->tcl_PkgRequireEx(interp, "Tcl", version, 0, NULL); if (actualVersion == NULL) { return NULL; } @@ -113,17 +104,17 @@ Tcl_InitStubs( } if (*p || isDigit(*q)) { /* Construct error message */ - Tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL); + stubsPtr->tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL); return NULL; } } else { - actualVersion = Tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL); + actualVersion = stubsPtr->tcl_PkgRequireEx(interp, "Tcl", version, 1, NULL); if (actualVersion == NULL) { return NULL; } } } - tclStubsPtr = (TclStubs *) pkgData; + tclStubsPtr = stubsPtr; if (tclStubsPtr->hooks) { tclPlatStubsPtr = tclStubsPtr->hooks->tclPlatStubs; |