X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fvfs%2Fopen.c;h=bd43a5f3c817002e43c6dfdbb48386d4dfa42271;hb=f67c9f03f7b4aaa3688ef74b255690d52ded3db2;hp=0bca8cac3c5b75fc9610c353b9a9aa37cbc6e450;hpb=3e11c7767641614fbb3fad38fffefa0da9e66919;p=tpg%2Facess2.git diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index 0bca8cac..bd43a5f3 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -1,8 +1,8 @@ /* - * AcessMicro VFS + * Acess2 VFS * - Open, Close and ChDir */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include "vfs.h" @@ -237,12 +237,6 @@ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath) longestMount = mnt; } - // Sanity Check - /*if(!longestMount) { - Log("VFS_ParsePath - ERROR: No Root Node\n"); - return NULL; - }*/ - // Save to shorter variable mnt = longestMount; @@ -294,11 +288,14 @@ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath) LEAVE('n'); return NULL; } - LOG("FindDir(%p, '%s')", curNode, pathEle); + LOG("FindDir{=%p}(%p, '%s')", curNode->FindDir, curNode, pathEle); // Get Child Node tmpNode = curNode->FindDir(curNode, pathEle); LOG("tmpNode = %p", tmpNode); - if(curNode->Close) curNode->Close(curNode); + if(curNode->Close) { + //LOG2("curNode->Close = %p", curNode->Close); + curNode->Close(curNode); + } curNode = tmpNode; // Error Check @@ -397,6 +394,17 @@ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath) retLength += nextSlash + 1; } + if( !curNode->FindDir ) { + if(curNode->Close) curNode->Close(curNode); + if(TruePath) { + free(*TruePath); + *TruePath = NULL; + } + Log("FindDir fail on '%s'", Path); + LEAVE('n'); + return NULL; + } + // Get last node LOG("VFS_ParsePath: FindDir(%p, '%s')", curNode, &Path[ofs]); tmpNode = curNode->FindDir(curNode, &Path[ofs]);