Kernel - Implimenting PTYs (untested, unintegrated)
[tpg/acess2.git] / KernelLand / Kernel / include / vfs_int.h
index a8eadb6..c2dacd3 100644 (file)
@@ -5,6 +5,7 @@
 #define _VFS_INT_H
 
 #include "vfs.h"
+#include <rwlock.h>
 
 // === 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

UCC git Repository :: git.ucc.asn.au