00001
00002
00003
00004
00019 #ifndef _VFS_H
00020 #define _VFS_H
00021
00022 #include <acess.h>
00023
00029
00030 #define VFS_FFLAG_READONLY 0x01 //!< Readonly File
00031
00040 #define VFS_FFLAG_DIRECTORY 0x02
00041
00046 #define VFS_FFLAG_SYMLINK 0x04
00047
00055 #define VFS_FFLAG_SETUID 0x08
00056
00064 #define VFS_FFLAG_SETGID 0x10
00065
00075 typedef struct sVFS_Node
00076 {
00083 Uint64 Inode;
00084 Uint ImplInt;
00085 void *ImplPtr;
00086
00095 int ReferenceCount;
00096
00097 Uint64 Size;
00098
00099 Uint32 Flags;
00100
00105 void *Data;
00114 Sint64 ATime;
00115 Sint64 MTime;
00116 Sint64 CTime;
00117
00125 tUID UID;
00126 tGID GID;
00127
00128 int NumACLs;
00129 tVFS_ACL *ACLs;
00130
00143 void (*Reference)(struct sVFS_Node *Node);
00151 void (*Close)(struct sVFS_Node *Node);
00152
00160 int (*IOCtl)(struct sVFS_Node *Node, int Id, void *Data);
00161
00181 Uint64 (*Read)(struct sVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer);
00190 Uint64 (*Write)(struct sVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer);
00191
00208 struct sVFS_Node *(*FindDir)(struct sVFS_Node *Node, char *Name);
00209
00220 char *(*ReadDir)(struct sVFS_Node *Node, int Pos);
00221
00229 int (*MkNod)(struct sVFS_Node *Node, char *Name, Uint Flags);
00230
00238 int (*Relink)(struct sVFS_Node *Node, char *OldName, char *NewName);
00239
00243 } tVFS_Node;
00244
00248 typedef struct sVFS_Driver
00249 {
00251 char *Name;
00253 Uint Flags;
00254
00256 tVFS_Node *(*InitDevice)(char *Device, char **Options);
00258 void (*Unmount)(tVFS_Node *Node);
00260 struct sVFS_Driver *Next;
00261 } tVFS_Driver;
00262
00263
00265 #define VFS_MAXSKIP ((void*)1024)
00266
00267 #define VFS_SKIP ((void*)1)
00268
00269 #define VFS_SKIPN(n) ((void*)(n))
00270
00271 extern tVFS_Node NULLNode;
00272
00277 extern tVFS_ACL gVFS_ACL_EveryoneRWX;
00278 extern tVFS_ACL gVFS_ACL_EveryoneRW;
00279 extern tVFS_ACL gVFS_ACL_EveryoneRX;
00280 extern tVFS_ACL gVFS_ACL_EveryoneRO;
00281
00285
00291 extern int VFS_AddDriver(tVFS_Driver *Info);
00297 extern tVFS_Driver *VFS_GetFSByName(char *Name);
00306 extern tVFS_ACL *VFS_UnixToAcessACL(Uint Mode, Uint Owner, Uint Group);
00307
00308
00323 extern int Inode_GetHandle();
00331 extern tVFS_Node *Inode_GetCache(int Handle, Uint64 Inode);
00339 extern tVFS_Node *Inode_CacheNode(int Handle, tVFS_Node *Node);
00346 extern void Inode_UncacheNode(int Handle, Uint64 Inode);
00352 extern void Inode_ClearCache(int Handle);
00353
00358 #endif