diff options
Diffstat (limited to 'generic/tclIOUtil.c')
-rw-r--r-- | generic/tclIOUtil.c | 139 |
1 files changed, 74 insertions, 65 deletions
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index ff7af5a..6723f27 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.173 2010/04/02 23:11:55 nijtmans Exp $ + * RCS: @(#) $Id: tclIOUtil.c,v 1.174 2010/04/04 15:11:51 dkf Exp $ */ #include "tclInt.h" @@ -42,9 +42,8 @@ static void FsUpdateCwd(Tcl_Obj *cwdObj, ClientData clientData); #ifdef TCL_THREADS static void FsRecacheFilesystemList(void); #endif -static void* DivertFindSymbol(Tcl_Interp* interp, - Tcl_LoadHandle loadHandle, - const char* symbol); +static void * DivertFindSymbol(Tcl_Interp *interp, + Tcl_LoadHandle loadHandle, const char *symbol); static void DivertUnloadFile(Tcl_LoadHandle loadHandle); /* @@ -2989,8 +2988,8 @@ Tcl_FSLoadFile( res = Tcl_LoadFile(interp, pathPtr, symbols, 0, procPtrs, handlePtr); if (res == TCL_OK) { - *proc1Ptr = (Tcl_PackageInitProc*) procPtrs[0]; - *proc2Ptr = (Tcl_PackageInitProc*) procPtrs[1]; + *proc1Ptr = (Tcl_PackageInitProc *) procPtrs[0]; + *proc2Ptr = (Tcl_PackageInitProc *) procPtrs[1]; } else { *proc1Ptr = *proc2Ptr = NULL; } @@ -3031,7 +3030,7 @@ Tcl_LoadFile( Tcl_Interp *interp, /* Used for error reporting. */ Tcl_Obj *pathPtr, /* Name of the file containing the desired * code. */ - const char *const symbols[], /* Names of functions to look up in the file's + const char *const symbols[],/* Names of functions to look up in the file's * symbol table. */ int flags, /* Flags (unused) */ void *procVPtrs, /* Where to return the addresses corresponding @@ -3040,10 +3039,10 @@ Tcl_LoadFile( * information which can be used in * TclpFindSymbol. */ { - void** procPtrs = (void**) procVPtrs; + void **procPtrs = (void **) procVPtrs; const Tcl_Filesystem *fsPtr = Tcl_FSGetFileSystemForPath(pathPtr); const Tcl_Filesystem *copyFsPtr; - Tcl_FSUnloadFileProc* unloadProcPtr; + Tcl_FSUnloadFileProc *unloadProcPtr; Tcl_Obj *copyToPtr; Tcl_LoadHandle newLoadHandle = NULL; Tcl_LoadHandle divertedLoadHandle = NULL; @@ -3152,7 +3151,8 @@ Tcl_LoadFile( Tcl_FSDeleteFile(copyToPtr); Tcl_DecrRefCount(copyToPtr); - Tcl_AppendResult(interp, "couldn't load from current filesystem",NULL); + Tcl_AppendResult(interp, "couldn't load from current filesystem", + NULL); return TCL_ERROR; } @@ -3166,7 +3166,7 @@ Tcl_LoadFile( return TCL_ERROR; } -#if !defined(__WIN32__) +#ifndef __WIN32__ /* * 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 @@ -3195,7 +3195,7 @@ Tcl_LoadFile( Tcl_ResetResult(interp); retVal = Tcl_LoadFile(interp, copyToPtr, symbols, 0, procPtrs, - &newLoadHandle); + &newLoadHandle); if (retVal != TCL_OK) { /* * The file didn't load successfully. @@ -3279,7 +3279,7 @@ Tcl_LoadFile( divertedLoadHandle = (Tcl_LoadHandle) - ckalloc(sizeof (struct Tcl_LoadHandle_)); + ckalloc(sizeof (struct Tcl_LoadHandle_)); divertedLoadHandle->clientData = (ClientData) tvdlPtr; divertedLoadHandle->findSymbolProcPtr = DivertFindSymbol; divertedLoadHandle->unloadFileProcPtr = DivertUnloadFile; @@ -3293,16 +3293,18 @@ Tcl_LoadFile( * At this point, *handlePtr is already set up to the handle for the * loaded library. We now try to resolve the symbols. */ + if (symbols != NULL) { for (i=0 ; symbols[i] != NULL; i++) { procPtrs[i] = Tcl_FindSymbol(interp, *handlePtr, symbols[i]); if (procPtrs[i] == NULL) { /* - * At least one symbol in the list was not found. - * Unload the file, and report the problem back to the - * caller. (Tcl_FindSymbol should already have left an - * appropriate error message.) - */ + * At least one symbol in the list was not found. Unload the + * file, and report the problem back to the caller. + * (Tcl_FindSymbol should already have left an appropriate + * error message.) + */ + (*handlePtr)->unloadFileProcPtr(*handlePtr); *handlePtr = NULL; return TCL_ERROR; @@ -3313,44 +3315,47 @@ Tcl_LoadFile( } /* - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * DivertFindSymbol -- * * Find a symbol in a shared library loaded by copy-from-VFS. * - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ -static void* -DivertFindSymbol(Tcl_Interp* interp, /* Tcl interpreter */ - Tcl_LoadHandle loadHandle, /* Handle to the diverted module */ - const char* symbol) /* Symbol to resolve */ +static void * +DivertFindSymbol( + Tcl_Interp *interp, /* Tcl interpreter */ + Tcl_LoadHandle loadHandle, /* Handle to the diverted module */ + const char *symbol) /* Symbol to resolve */ { - FsDivertLoad* tvdlPtr = (FsDivertLoad*) (loadHandle->clientData); + FsDivertLoad *tvdlPtr = (FsDivertLoad *) loadHandle->clientData; Tcl_LoadHandle originalHandle = tvdlPtr->loadHandle; + return originalHandle->findSymbolProcPtr(interp, originalHandle, symbol); } /* - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * DivertUnloadFile -- * - * Unloads a file that has been loaded by copying from VFS to the - * native filesystem. + * Unloads a file that has been loaded by copying from VFS to the native + * filesystem. * * Parameters: * loadHandle -- Handle of the file to unload * - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ static void -DivertUnloadFile(Tcl_LoadHandle loadHandle) +DivertUnloadFile( + Tcl_LoadHandle loadHandle) { - FsDivertLoad* tvdlPtr = (FsDivertLoad*) (loadHandle->clientData); - Tcl_LoadHandle originalHandle = tvdlPtr->loadHandle; + FsDivertLoad *tvdlPtr = (FsDivertLoad *) loadHandle->clientData; + Tcl_LoadHandle originalHandle; /* * This test should never trigger, since we give the client data in the @@ -3360,6 +3365,7 @@ DivertUnloadFile(Tcl_LoadHandle loadHandle) if (tvdlPtr == NULL) { return; } + originalHandle = tvdlPtr->loadHandle; /* * Call the real 'unloadfile' proc we actually used. It is very important @@ -3370,7 +3376,9 @@ DivertUnloadFile(Tcl_LoadHandle loadHandle) originalHandle->unloadFileProcPtr(originalHandle); - /* What filesystem contains the temp copy of the library? */ + /* + * What filesystem contains the temp copy of the library? + */ if (tvdlPtr->divertedFilesystem == NULL) { /* @@ -3415,8 +3423,8 @@ DivertUnloadFile(Tcl_LoadHandle loadHandle) Tcl_DecrRefCount(tvdlPtr->divertedFile); } - ckfree((void*)tvdlPtr); - ckfree((void*)loadHandle); + ckfree((void *) tvdlPtr); + ckfree((void *) loadHandle); } /* @@ -3464,82 +3472,83 @@ TclpLoadFile( } /* - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * Tcl_FindSymbol -- * * Find a symbol in a loaded library * * Results: - * Returns a pointer to the symbol if found. If not found, returns - * NULL and leaves an error message in the interpreter result. + * Returns a pointer to the symbol if found. If not found, returns NULL + * and leaves an error message in the interpreter result. * - * This function was once filesystem-specific, but has been made portable - * by having TclpDlopen return a structure that includes procedure pointers. + * This function was once filesystem-specific, but has been made portable by + * having TclpDlopen return a structure that includes procedure pointers. * - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ -void* -Tcl_FindSymbol(Tcl_Interp* interp, /* Tcl interpreter */ - Tcl_LoadHandle loadHandle, /* Handle to the loaded library */ - const char* symbol) /* Name of the symbol to resolve */ +void * +Tcl_FindSymbol( + Tcl_Interp *interp, /* Tcl interpreter */ + Tcl_LoadHandle loadHandle, /* Handle to the loaded library */ + const char *symbol) /* Name of the symbol to resolve */ { - return (*(loadHandle->findSymbolProcPtr))(interp, loadHandle, symbol); + return loadHandle->findSymbolProcPtr(interp, loadHandle, symbol); } /* - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * Tcl_FSUnloadFile -- * * Unloads a library given its handle. Checks first that the library * supports unloading. * - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ int -Tcl_FSUnloadFile(Tcl_Interp* interp, /* Tcl interpreter */ - Tcl_LoadHandle handle) /* Handle of the file to unload */ +Tcl_FSUnloadFile( + Tcl_Interp *interp, /* Tcl interpreter */ + Tcl_LoadHandle handle) /* Handle of the file to unload */ { if (handle->unloadFileProcPtr == NULL) { if (interp != NULL) { - Tcl_SetObjResult(interp, - Tcl_NewStringObj("cannot unload: filesystem " - "does not support unloading", - -1)); + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "cannot unload: filesystem does not support unloading", + -1)); } return TCL_ERROR; - } else { - TclpUnloadFile(handle); - return TCL_OK; } + TclpUnloadFile(handle); + return TCL_OK; } /* - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * TclpUnloadFile -- * * Unloads a library given its handle * - * This function was once filesystem-specific, but has been made portable - * by having TclpDlopen return a structure that includes procedure pointers. + * This function was once filesystem-specific, but has been made portable by + * having TclpDlopen return a structure that includes procedure pointers. * - *----------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ void -TclpUnloadFile(Tcl_LoadHandle handle) +TclpUnloadFile( + Tcl_LoadHandle handle) { if (handle->unloadFileProcPtr != NULL) { - (*(handle->unloadFileProcPtr))(handle); + handle->unloadFileProcPtr(handle); } } /* - *--------------------------------------------------------------------------- + *---------------------------------------------------------------------- * * TclFSUnloadTempFile -- * @@ -3554,7 +3563,7 @@ TclpUnloadFile(Tcl_LoadHandle handle) * The effects of the 'unload' function called, and of course the * temporary file will be deleted. * - *--------------------------------------------------------------------------- + *---------------------------------------------------------------------- */ void |