X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fvfs%2Fopen.c;h=ac47683f0631bf201991aae00531cdc19dd7fba2;hb=156885e938b60fee9d061d989ae7711c9aeea493;hp=74427b56ed6b13adcba04dd5b7138add1ed9f8c6;hpb=a4ce2e60f783c9e71447edc03f20f937b8abf35a;p=tpg%2Facess2.git diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index 74427b56..ac47683f 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -269,7 +269,7 @@ tVFS_Node *VFS_ParsePath(char *Path, char **TruePath) // Check permissions on root of filesystem if( !VFS_CheckACL(curNode, VFS_PERM_EXECUTE) ) { - curNode->Close( curNode ); + if(curNode->Close) curNode->Close( curNode ); if(TruePath) { free(*TruePath); *TruePath = NULL; @@ -280,7 +280,8 @@ tVFS_Node *VFS_ParsePath(char *Path, char **TruePath) } // Check if the node has a FindDir method - if(!curNode->FindDir) { + if( !curNode->FindDir ) + { if(curNode->Close) curNode->Close(curNode); if(TruePath) { free(*TruePath); @@ -295,8 +296,7 @@ tVFS_Node *VFS_ParsePath(char *Path, char **TruePath) // Get Child Node tmpNode = curNode->FindDir(curNode, &Path[ofs]); LOG("tmpNode = %p", tmpNode); - if(curNode->Close) - curNode->Close(curNode); + if(curNode->Close) curNode->Close(curNode); curNode = tmpNode; // Error Check @@ -319,6 +319,13 @@ tVFS_Node *VFS_ParsePath(char *Path, char **TruePath) *TruePath = NULL; } tmp = malloc( curNode->Size + 1 ); + if(!curNode->Read) { + Warning("VFS_ParsePath - Read of node %p is NULL (%s)", + curNode, Path); + if(curNode->Close) curNode->Close(curNode); + LEAVE('n'); + return NULL; + } curNode->Read( curNode, 0, curNode->Size, tmp ); tmp[ curNode->Size ] = '\0'; @@ -471,7 +478,7 @@ int VFS_Open(char *Path, Uint Mode) // Permissions Check if( !VFS_CheckACL(node, i) ) { - node->Close( node ); + if(node->Close) node->Close( node ); Log("VFS_Open: Permissions Failed"); LEAVE('i', -1); return -1;