2 * Acess2 Networking Test Suite (NetTest)
3 * - By John Hodge (thePowersGang)
6 * - VFS Layer Emulation
13 int VFS_SelectNode(tVFS_Node *Node, int Type, tTime *Timeout, const char *Name)
15 tThread *us = Proc_GetCurThread();
19 Threads_ClearEvent(THREAD_EVENT_VFS);
21 if( Type & VFS_SELECT_READ ) {
22 Node->ReadThreads = (void*)us;
23 if(Node->DataAvaliable) ret |= VFS_SELECT_READ;
25 if( Type & VFS_SELECT_WRITE ) {
26 Node->WriteThreads = (void*)us;
27 if(!Node->BufferFull) ret |= VFS_SELECT_WRITE;
29 if( Type & VFS_SELECT_ERROR ) {
30 Node->ErrorThreads = (void*)us;
31 if(Node->ErrorOccurred) ret |= VFS_SELECT_ERROR;
37 Threads_WaitEvents(THREAD_EVENT_VFS);
40 if( Type & VFS_SELECT_READ ) {
41 Node->ReadThreads = NULL;
42 if(Node->DataAvaliable) ret |= VFS_SELECT_READ;
44 if( Type & VFS_SELECT_WRITE ) {
45 Node->WriteThreads = NULL;
46 if(!Node->BufferFull) ret |= VFS_SELECT_WRITE;
48 if( Type & VFS_SELECT_ERROR ) {
49 Node->ErrorThreads = NULL;
50 if(Node->ErrorOccurred) ret |= VFS_SELECT_ERROR;
55 int VFS_MarkAvaliable(tVFS_Node *Node, BOOL bAvail)
57 Node->DataAvaliable = bAvail;
58 if( Node->DataAvaliable && Node->ReadThreads )
59 Threads_PostEvent( (void*)Node->ReadThreads, THREAD_EVENT_VFS );
63 int VFS_MarkError(tVFS_Node *Node, BOOL bError)
65 Node->ErrorOccurred = bError;
66 if( Node->ErrorOccurred && Node->ErrorThreads )
67 Threads_PostEvent( (void*)Node->ErrorThreads, THREAD_EVENT_VFS );
71 int VFS_MarkFull(tVFS_Node *Node, BOOL bError)
73 Node->BufferFull = bError;
74 if( !Node->BufferFull && Node->WriteThreads )
75 Threads_PostEvent( (void*)Node->WriteThreads, THREAD_EVENT_VFS );
81 int VFS_Open(const char *Path, Uint Flags)
86 void VFS_Close(int FD)
91 int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode)
93 const int maxfd = *Threads_GetMaxFD();
94 tVFS_Handle *handles = *Threads_GetHandlesPtr();
96 handles = calloc( maxfd, sizeof(tVFS_Handle) );
97 *Threads_GetHandlesPtr() = handles;
100 // TODO: Global handles
102 for( int i = 0; i < maxfd; i ++ )
104 if( handles[i].Node == NULL ) {
105 handles[i].Node = Node;
106 handles[i].Mode = Mode;
113 tVFS_Handle *VFS_GetHandle(int FD)
115 const int maxfd = *Threads_GetMaxFD();
116 tVFS_Handle *handles = *Threads_GetHandlesPtr();
120 if( FD < 0 || FD >= maxfd )