Annotation For xvfs-core.c

Origin for each line in xvfs-core.c from check-in e5b6962adf:

69e476dcd5 2019-05-02        rkeene: #include <xvfs-core.h>
69e476dcd5 2019-05-02        rkeene: #include <tcl.h>
69e476dcd5 2019-05-02        rkeene: 
e5b6962adf 2019-05-02        rkeene: static int xvfs_tclvfs_standalone_pathInFilesystem(Tcl_Obj *path, ClientData *dataPtr) {
e5b6962adf 2019-05-02        rkeene: 	return(TCL_ERROR);
e5b6962adf 2019-05-02        rkeene: }
e5b6962adf 2019-05-02        rkeene: 
e5b6962adf 2019-05-02        rkeene: static int xvfs_tclvfs_normalizePath(Tcl_Interp *interp, Tcl_Obj *path, int nextCheckpoint) {
e5b6962adf 2019-05-02        rkeene: 	return(TCL_ERROR);
e5b6962adf 2019-05-02        rkeene: }
e5b6962adf 2019-05-02        rkeene: 
e5b6962adf 2019-05-02        rkeene: static Tcl_Obj *xvfs_tclvfs_listVolumes() {
e5b6962adf 2019-05-02        rkeene: 	return(NULL);
e5b6962adf 2019-05-02        rkeene: }
e5b6962adf 2019-05-02        rkeene: 
32b55a907b 2019-05-02        rkeene: /*
32b55a907b 2019-05-02        rkeene:  * There are three (3) modes of operation for Xvfs_Register:
32b55a907b 2019-05-02        rkeene:  *    1. standalone -- We register our own Tcl_Filesystem
32b55a907b 2019-05-02        rkeene:  *                     and handle requests under `//xvfs:/<fsName>`
32b55a907b 2019-05-02        rkeene:  *    2. client -- A single Tcl_Filesystem is registered for the
32b55a907b 2019-05-02        rkeene:  *                 interp to handle requests under `//xvfs:/` which
32b55a907b 2019-05-02        rkeene:  *                 then dispatches to the appropriate registered
32b55a907b 2019-05-02        rkeene:  *                 handler
32b55a907b 2019-05-02        rkeene:  *    3. flexible -- Attempts to find a core Xvfs instance for the
32b55a907b 2019-05-02        rkeene:  *                   process at runtime, if found do #2, otherwise
32b55a907b 2019-05-02        rkeene:  *                   fallback to #1
32b55a907b 2019-05-02        rkeene:  *
32b55a907b 2019-05-02        rkeene:  */
e5b6962adf 2019-05-02        rkeene: static int xvfs_standalone_register(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo) {
e5b6962adf 2019-05-02        rkeene: 	Tcl_Filesystem *xvfsInfo;
e5b6962adf 2019-05-02        rkeene: 	int tcl_ret;
e5b6962adf 2019-05-02        rkeene: 	
e5b6962adf 2019-05-02        rkeene: 	/*
e5b6962adf 2019-05-02        rkeene: 	 * In standalone mode, we only support the same protocol we are
e5b6962adf 2019-05-02        rkeene: 	 * compiling for.
e5b6962adf 2019-05-02        rkeene: 	 */
e5b6962adf 2019-05-02        rkeene: 	if (fsInfo->protocolVersion != XVFS_PROTOCOL_VERSION) {
e5b6962adf 2019-05-02        rkeene: 		if (interp) {
e5b6962adf 2019-05-02        rkeene: 			Tcl_SetResult(interp, "Protocol mismatch", NULL);
e5b6962adf 2019-05-02        rkeene: 		}
e5b6962adf 2019-05-02        rkeene: 		return(TCL_ERROR);
e5b6962adf 2019-05-02        rkeene: 	}
e5b6962adf 2019-05-02        rkeene: 	
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo = (Tcl_Filesystem *) Tcl_AttemptAlloc(sizeof(*xvfsInfo));
e5b6962adf 2019-05-02        rkeene: 	if (!xvfsInfo) {
e5b6962adf 2019-05-02        rkeene: 		if (interp) {
e5b6962adf 2019-05-02        rkeene: 			Tcl_SetResult(interp, "Unable to allocate Tcl_Filesystem object", NULL);
e5b6962adf 2019-05-02        rkeene: 		}
e5b6962adf 2019-05-02        rkeene: 		return(TCL_ERROR);
e5b6962adf 2019-05-02        rkeene: 	}
e5b6962adf 2019-05-02        rkeene: 	
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->typeName                   = "xvfs";
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->structureLength            = sizeof(*xvfsInfo);
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->version                    = TCL_FILESYSTEM_VERSION_1;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->pathInFilesystemProc       = xvfs_tclvfs_standalone_pathInFilesystem;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->dupInternalRepProc         = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->freeInternalRepProc        = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->internalToNormalizedProc   = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->createInternalRepProc      = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->normalizePathProc          = xvfs_tclvfs_normalizePath;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->filesystemPathTypeProc     = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->filesystemSeparatorProc    = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->statProc                   = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->accessProc                 = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->openFileChannelProc        = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->matchInDirectoryProc       = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->utimeProc                  = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->linkProc                   = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->listVolumesProc            = xvfs_tclvfs_listVolumes;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->fileAttrStringsProc        = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->fileAttrsGetProc           = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->fileAttrsSetProc           = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->createDirectoryProc        = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->removeDirectoryProc        = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->deleteFileProc             = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->copyFileProc               = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->renameFileProc             = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->copyDirectoryProc          = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->lstatProc                  = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->loadFileProc               = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->getCwdProc                 = NULL;
e5b6962adf 2019-05-02        rkeene: 	xvfsInfo->chdirProc                  = NULL;
e5b6962adf 2019-05-02        rkeene: 
e5b6962adf 2019-05-02        rkeene: 	tcl_ret = Tcl_FSRegister(NULL, xvfsInfo);
e5b6962adf 2019-05-02        rkeene: 	if (tcl_ret != TCL_OK) {
e5b6962adf 2019-05-02        rkeene: 		if (interp) {
e5b6962adf 2019-05-02        rkeene: 			Tcl_SetResult(interp, "Tcl_FSRegister() failed", NULL);
e5b6962adf 2019-05-02        rkeene: 		}
e5b6962adf 2019-05-02        rkeene: 		
e5b6962adf 2019-05-02        rkeene: 		return(tcl_ret);
e5b6962adf 2019-05-02        rkeene: 	}
e5b6962adf 2019-05-02        rkeene: 	
e5b6962adf 2019-05-02        rkeene: 	return(TCL_OK);
32b55a907b 2019-05-02        rkeene: }
32b55a907b 2019-05-02        rkeene: 
e5b6962adf 2019-05-02        rkeene: int Xvfs_Register(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo) {
e5b6962adf 2019-05-02        rkeene: 	return(xvfs_standalone_register(interp, fsInfo));
69e476dcd5 2019-05-02        rkeene: }