X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fvfs%2Fopen.c;h=bd43a5f3c817002e43c6dfdbb48386d4dfa42271;hb=f67c9f03f7b4aaa3688ef74b255690d52ded3db2;hp=118380fd340e4160babee9a2aaaf229e5db8d262;hpb=73e8ed89c011abce9b0ae2c5a3eb232bdbe8660e;p=tpg%2Facess2.git diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index 118380fd..bd43a5f3 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -1,5 +1,5 @@ /* - * AcessMicro VFS + * Acess2 VFS * - Open, Close and ChDir */ #define DEBUG 0 @@ -167,7 +167,7 @@ char *VFS_GetAbsPath(const char *Path) } /** - * \fn char *VFS_ParsePath(char *Path, char **TruePath) + * \fn char *VFS_ParsePath(const char *Path, char **TruePath) * \brief Parses a path, resolving sysmlinks and applying permissions */ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath) @@ -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 @@ -391,12 +388,23 @@ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath) (*TruePath)[retLength] = '/'; strcpy(*TruePath+retLength+1, pathEle); - LOG("*TruePath = '%s'\n", *TruePath); + LOG("*TruePath = '%s'", *TruePath); // - Extend Path 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]);