diff options
author | vincentdarley <vincentdarley> | 2002-12-04 13:09:23 (GMT) |
---|---|---|
committer | vincentdarley <vincentdarley> | 2002-12-04 13:09:23 (GMT) |
commit | 8e711fbc8f9fa92e577821c9c5243bbd4c1d6a8c (patch) | |
tree | ece8c5fb3e39618118a34fe0c86c472597b8cf16 | |
parent | 3ec15d47f45aee77ef86ca5943b8c7624c37718c (diff) | |
download | tcl-8e711fbc8f9fa92e577821c9c5243bbd4c1d6a8c.zip tcl-8e711fbc8f9fa92e577821c9c5243bbd4c1d6a8c.tar.gz tcl-8e711fbc8f9fa92e577821c9c5243bbd4c1d6a8c.tar.bz2 |
filesystem cleanup fix, virtual filesystem load fix
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | generic/tclEvent.c | 25 | ||||
-rw-r--r-- | generic/tclIOUtil.c | 27 | ||||
-rw-r--r-- | generic/tclTestObj.c | 11 |
4 files changed, 53 insertions, 22 deletions
@@ -1,3 +1,15 @@ +2002-12-04 Vince Darley <vincentdarley@users.sourceforge.net> + + * generic/tclIOUtil.c: fix to redirected 'load' in virtual + filesystem for some Unix systems. + + * generic/tclEvent.c: the filesystem must be cleaned up before + the encoding subsystem because it needs access to encodings. + Fixes crash on exit observed in embedded applications. + + * generic/tclTestObj.c: patch omitted from previous change + of 2002-11-13 + 2002-12-03 Jeff Hobbs <jeffh@ActiveState.com> * generic/tclStubLib.c (Tcl_InitStubs): prevent the cached check of diff --git a/generic/tclEvent.c b/generic/tclEvent.c index 957c5f6..28b3489 100644 --- a/generic/tclEvent.c +++ b/generic/tclEvent.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEvent.c,v 1.24 2002/11/07 02:13:36 mdejong Exp $ + * RCS: @(#) $Id: tclEvent.c,v 1.25 2002/12/04 13:09:23 vincentdarley Exp $ */ #include "tclInt.h" @@ -812,6 +812,22 @@ Tcl_Finalize() TclFinalizeCompExecEnv(); TclFinalizeEnvironment(); + /* + * Finalizing the filesystem must come after anything which + * might conceivably interact with the 'Tcl_FS' API. This + * will also unload any extensions which have been loaded. + * However, it also needs access to the encoding subsystem + * during finalization, so that system must still be intact + * at this point. + */ + TclFinalizeFilesystem(); + + /* + * We must be sure the encoding finalization doesn't need + * to examine the filesystem in any way. Since it only + * needs to clean up internal data structures, this is + * fine. + */ TclFinalizeEncodingSubsystem(); if (tclExecutableName != NULL) { @@ -836,13 +852,6 @@ Tcl_Finalize() TclFinalizeSynchronization(); - /** - * Finalizing the filesystem must come after anything which - * might conceivably interact with the 'Tcl_FS' API. This - * will also unload any extensions which have been loaded. - */ - TclFinalizeFilesystem(); - /* * There shouldn't be any malloc'ed memory after this. */ diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index 334c569..059348d 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -17,7 +17,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIOUtil.c,v 1.65 2002/08/16 13:37:49 dkf Exp $ + * RCS: @(#) $Id: tclIOUtil.c,v 1.66 2002/12/04 13:09:24 vincentdarley Exp $ */ #include "tclInt.h" @@ -2570,23 +2570,26 @@ Tcl_FSLoadFile(interp, pathPtr, sym1, sym2, proc1Ptr, proc2Ptr, if (TclCrossFilesystemCopy(interp, pathPtr, copyToPtr) == TCL_OK) { + Tcl_LoadHandle newLoadHandle = NULL; + Tcl_FSUnloadFileProc *newUnloadProcPtr = NULL; + FsDivertLoad *tvdlPtr; + int retVal; + +#if !defined(__WIN32__) && !defined(MAC_TCL) /* * Do we need to set appropriate permissions * on the file? This may be required on some * systems. On Unix we could loop over * the file attributes, and set any that are - * called "-permissions" to 0777. Or directly: - * - * Tcl_Obj* perm = Tcl_NewStringObj("0777",-1); - * Tcl_IncrRefCount(perm); - * Tcl_FSFileAttrsSet(NULL, 2, copyToPtr, perm); - * Tcl_DecrRefCount(perm); - * + * called "-permissions" to 0700. However, + * we just do this directly, like this: */ - Tcl_LoadHandle newLoadHandle = NULL; - Tcl_FSUnloadFileProc *newUnloadProcPtr = NULL; - FsDivertLoad *tvdlPtr; - int retVal; + + Tcl_Obj* perm = Tcl_NewStringObj("0700",-1); + Tcl_IncrRefCount(perm); + Tcl_FSFileAttrsSet(NULL, 2, copyToPtr, perm); + Tcl_DecrRefCount(perm); +#endif retVal = Tcl_FSLoadFile(interp, copyToPtr, sym1, sym2, proc1Ptr, proc2Ptr, diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c index ec489d6..5c45d70 100644 --- a/generic/tclTestObj.c +++ b/generic/tclTestObj.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclTestObj.c,v 1.11 2002/02/15 23:42:12 kennykb Exp $ + * RCS: @(#) $Id: tclTestObj.c,v 1.12 2002/12/04 13:09:24 vincentdarley Exp $ */ #include "tclInt.h" @@ -911,7 +911,8 @@ TeststringobjCmd(clientData, interp, objc, objv) TestString *strPtr; static CONST char *options[] = { "append", "appendstrings", "get", "get2", "length", "length2", - "set", "set2", "setlength", "ualloc", (char *) NULL + "set", "set2", "setlength", "ualloc", "getunicode", + (char *) NULL }; if (objc < 3) { @@ -1073,6 +1074,12 @@ TeststringobjCmd(clientData, interp, objc, objv) } Tcl_SetIntObj(Tcl_GetObjResult(interp), length); break; + case 10: /* getunicode */ + if (objc != 3) { + goto wrongNumArgs; + } + Tcl_GetUnicodeFromObj(varPtr[varIndex], NULL); + break; } return TCL_OK; |