Posted to tcl by stevel at Thu Jan 10 08:55:03 GMT 2008view raw
- static int
- Critcl_Preload(
- ClientData dummy,
- Tcl_Interp *interp,
- int objc,
- Tcl_Obj *objv[])
- {
- int code;
- Tcl_PackageInitProc *proc1, *proc2;
- Tcl_LoadHandle loadHandle;
- Tcl_FSUnloadFileProc *unLoadProcPtr = NULL;
- Tcl_Filesystem *fsPtr;
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "fileName");
- return TCL_ERROR;
- }
- if (Tcl_FSConvertToPathType(interp, objv[1]) != TCL_OK) {
- return TCL_ERROR;
- }
- #ifdef WIN32
- // if the filesystem holding the dll doesn't support direct loading
- // we need to copy it to a temporary directory and load it from there
- // - critcl2::precopy is defined in critcl/lib/app-critcl/runtime.tcl
- if ((fsPtr = Tcl_FSGetFileSystemForPath(objv[1])) != NULL \
- && fsPtr->loadFileProc == NULL) {
- objv[0] = Tcl_NewStringObj("::critcl2::precopy", -1);
- if ((code = Tcl_EvalObjv(interp, 2, objv, 0)) != TCL_OK) {
- Tcl_SetErrorCode(interp, "could not preload ",
- Tcl_GetString(objv[1]), 0);
- return TCL_ERROR;
- }
- objv[1] = Tcl_GetObjResult(interp);
- Tcl_IncrRefCount(objv[1]);
- }
- #endif
- Tcl_MutexLock(&packageMutex);
- code = Tcl_FSLoadFile(interp, objv[1], NULL, NULL, NULL, NULL,
- &loadHandle, &unLoadProcPtr);
- Tcl_MutexUnlock(&packageMutex);
- return code;
- }