tclstublib.c
来自「tcl是工具命令语言」· C语言 代码 · 共 122 行
C
122 行
/* * tclStubLib.c -- * * Stub object that will be statically linked into extensions that wish * to access Tcl. * * Copyright (c) 1998-1999 by Scriptics Corporation. * Copyright (c) 1998 Paul Duffin. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclStubLib.c,v 1.6 2002/12/04 07:07:59 hobbs Exp $ *//* * 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. */#ifndef USE_TCL_STUBS#define USE_TCL_STUBS#endif#undef USE_TCL_STUB_PROCS#include "tclInt.h"#include "tclPort.h"/* * Ensure that Tcl_InitStubs is built as an exported symbol. The other stub * functions should be built as non-exported symbols. */#undef TCL_STORAGE_CLASS#define TCL_STORAGE_CLASS DLLEXPORTTclStubs *tclStubsPtr = NULL;TclPlatStubs *tclPlatStubsPtr = NULL;TclIntStubs *tclIntStubsPtr = NULL;TclIntPlatStubs *tclIntPlatStubsPtr = NULL;static TclStubs * HasStubSupport _ANSI_ARGS_((Tcl_Interp *interp));static TclStubs *HasStubSupport (interp) Tcl_Interp *interp;{ Interp *iPtr = (Interp *) interp; if (iPtr->stubTable && (iPtr->stubTable->magic == TCL_STUB_MAGIC)) { return iPtr->stubTable; } interp->result = "This interpreter does not support stubs-enabled extensions."; interp->freeProc = TCL_STATIC; return NULL;}/* *---------------------------------------------------------------------- * * Tcl_InitStubs -- * * Tries to initialise the stub table pointers and ensures that * the correct version of Tcl is loaded. * * Results: * The actual version of Tcl that satisfies the request, or * NULL to indicate that an error occurred. * * Side effects: * Sets the stub table pointers. * *---------------------------------------------------------------------- */#ifdef Tcl_InitStubs#undef Tcl_InitStubs#endifCONST char *Tcl_InitStubs (interp, version, exact) Tcl_Interp *interp; CONST char *version; int exact;{ CONST char *actualVersion = NULL; TclStubs *tmp; /* * We can't optimize this check by caching tclStubsPtr because * that prevents apps from being able to load/unload Tcl dynamically * multiple times. [Bug 615304] */ tclStubsPtr = HasStubSupport(interp); if (!tclStubsPtr) { return NULL; } actualVersion = Tcl_PkgRequireEx(interp, "Tcl", version, exact, (ClientData *) &tmp); if (actualVersion == NULL) { tclStubsPtr = NULL; return NULL; } if (tclStubsPtr->hooks) { tclPlatStubsPtr = tclStubsPtr->hooks->tclPlatStubs; tclIntStubsPtr = tclStubsPtr->hooks->tclIntStubs; tclIntPlatStubsPtr = tclStubsPtr->hooks->tclIntPlatStubs; } else { tclPlatStubsPtr = NULL; tclIntStubsPtr = NULL; tclIntPlatStubsPtr = NULL; } return actualVersion;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?