diff options
| author | dgp <dgp@users.sourceforge.net> | 2023-11-03 12:53:39 (GMT) |
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2023-11-03 12:53:39 (GMT) |
| commit | 726af57a2d3fd42497110c57ca7d0ac666cb25a5 (patch) | |
| tree | fc17377b13c035acc4a1d4b0a905ccd53d5d0fa3 | |
| parent | 21e5eb5e3e51e0d244cc9dd876049dc25db27c49 (diff) | |
| parent | 69fb959ca642175270a38faf7bfab40da094a9b7 (diff) | |
| download | tcl-726af57a2d3fd42497110c57ca7d0ac666cb25a5.zip tcl-726af57a2d3fd42497110c57ca7d0ac666cb25a5.tar.gz tcl-726af57a2d3fd42497110c57ca7d0ac666cb25a5.tar.bz2 | |
merge 8.7
| -rw-r--r-- | generic/tclZipfs.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/generic/tclZipfs.c b/generic/tclZipfs.c index 9372079..842d51a 100644 --- a/generic/tclZipfs.c +++ b/generic/tclZipfs.c @@ -327,6 +327,7 @@ static int InitWritableChannel(Tcl_Interp *interp, static int ListMountPoints(Tcl_Interp *interp); static int ContainsMountPoint(const char *path, int pathLen); static void CleanupMount(ZipFile *zf); +static Tcl_Obj * ScriptLibrarySetup(const char *dirName); static void SerializeCentralDirectoryEntry( const unsigned char *start, const unsigned char *end, unsigned char *buf, @@ -4222,6 +4223,26 @@ ZipFSListObjCmd( *------------------------------------------------------------------------- */ +/* Utility routine to centralize housekeeping */ +static Tcl_Obj * +ScriptLibrarySetup( + const char *dirName) +{ + Tcl_Obj *libDirObj = Tcl_NewStringObj(dirName, -1); + Tcl_Obj *subDirObj, *searchPathObj; + + TclNewLiteralStringObj(subDirObj, "encoding"); + Tcl_IncrRefCount(subDirObj); + TclNewObj(searchPathObj); + Tcl_ListObjAppendElement(NULL, searchPathObj, + Tcl_FSJoinToPath(libDirObj, 1, &subDirObj)); + Tcl_DecrRefCount(subDirObj); + Tcl_IncrRefCount(searchPathObj); + Tcl_SetEncodingSearchPath(searchPathObj); + Tcl_DecrRefCount(searchPathObj); + return libDirObj; +} + Tcl_Obj * TclZipfs_TclLibrary(void) { @@ -4240,7 +4261,7 @@ TclZipfs_TclLibrary(void) */ if (zipfs_literal_tcl_library) { - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } /* @@ -4254,7 +4275,7 @@ TclZipfs_TclLibrary(void) Tcl_DecrRefCount(vfsInitScript); if (found == TCL_OK) { zipfs_literal_tcl_library = ZIPFS_APP_MOUNT "/tcl_library"; - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } /* @@ -4273,17 +4294,17 @@ TclZipfs_TclLibrary(void) #endif if (ZipfsAppHookFindTclInit(dllName) == TCL_OK) { - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } #elif !defined(NO_DLFCN_H) Dl_info dlinfo; if (dladdr((const void *)TclZipfs_TclLibrary, &dlinfo) && (dlinfo.dli_fname != NULL) && (ZipfsAppHookFindTclInit(dlinfo.dli_fname) == TCL_OK)) { - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } #else if (ZipfsAppHookFindTclInit(CFG_RUNTIME_LIBDIR "/" CFG_RUNTIME_DLLFILE) == TCL_OK) { - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } #endif /* _WIN32 */ #endif /* !defined(STATIC_BUILD) */ @@ -4294,7 +4315,7 @@ TclZipfs_TclLibrary(void) */ if (zipfs_literal_tcl_library) { - return Tcl_NewStringObj(zipfs_literal_tcl_library, -1); + return ScriptLibrarySetup(zipfs_literal_tcl_library); } return NULL; } |
