X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Finclude%2Fvfs_int.h;h=c2dacd349771c5e6028c6e92caf42e644636a6f5;hb=07ed0e7479fc741a947579d4460a25a050fc9260;hp=a8eadb6de40bc67b907f11929c94c982b546b907;hpb=51ab5f489bc356940c95cc936fd0508e8f07ea97;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/include/vfs_int.h b/KernelLand/Kernel/include/vfs_int.h index a8eadb6d..c2dacd34 100644 --- a/KernelLand/Kernel/include/vfs_int.h +++ b/KernelLand/Kernel/include/vfs_int.h @@ -5,6 +5,7 @@ #define _VFS_INT_H #include "vfs.h" +#include // === TYPES === typedef struct sVFS_Mount { @@ -16,6 +17,9 @@ typedef struct sVFS_Mount { char *Options; tVFS_Driver *Filesystem; tVFS_Node *RootNode; + + int OpenHandleCount; + char StrData[]; } tVFS_Mount; @@ -42,9 +46,12 @@ typedef struct sVFS_MMapPage { } tVFS_MMapPage; // === GLOBALS === +extern tRWLock glVFS_MountList; extern tVFS_Mount *gVFS_Mounts; +extern tVFS_Driver *gVFS_Drivers; // === PROTOTYPES === +extern void VFS_Deinit(void); // --- open.c --- extern char *VFS_GetAbsPath(const char *Path); extern tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath, tVFS_Mount **MountPoint); @@ -55,6 +62,9 @@ extern int VFS_CheckACL(tVFS_Node *Node, Uint Permissions); extern tVFS_Mount *VFS_GetMountByIdent(Uint32 MountID); // --- dir.c --- extern int VFS_MkNod(const char *Path, Uint Flags); +// --- handle.c --- +extern int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode); +extern int VFS_SetHandle(int FD, tVFS_Node *Node, int Mode); // --- VFS Helpers --- @@ -63,6 +73,18 @@ static inline void _CloseNode(tVFS_Node *Node) if(Node && Node->Type && Node->Type->Close) Node->Type->Close( Node ); } +static inline void _ReferenceNode(tVFS_Node *Node) +{ + if( !MM_GetPhysAddr(Node->Type) ) { + Log_Error("VFS", "Node %p's type is invalid (%p bad pointer) - %P corrupted", + Node, Node->Type, MM_GetPhysAddr(&Node->Type)); + return ; + } + if( Node->Type && Node->Type->Reference ) + Node->Type->Reference( Node ); + else + Node->ReferenceCount ++; +} #endif