X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest%2Fvfs_shim.c;h=97ac4db1da257c7b50113b7fdea06408cfb2a2be;hb=015f48988e0ff398409d71dfc692005ab439490a;hp=1b0c686a435e4c4feb5150c713682cfa60150fbc;hpb=7ba570fe3cc5418f42decf5b72ac2295cce9e60f;p=tpg%2Facess2.git diff --git a/Tools/NetTest/vfs_shim.c b/Tools/NetTest/vfs_shim.c index 1b0c686a..97ac4db1 100644 --- a/Tools/NetTest/vfs_shim.c +++ b/Tools/NetTest/vfs_shim.c @@ -12,8 +12,44 @@ // === CODE === int VFS_SelectNode(tVFS_Node *Node, int Type, tTime *Timeout, const char *Name) { + tThread *us = Proc_GetCurThread(); + + int ret = 0; + + Threads_ClearEvent(THREAD_EVENT_VFS); + + if( Type & VFS_SELECT_READ ) { + Node->ReadThreads = (void*)us; + if(Node->DataAvaliable) ret |= VFS_SELECT_READ; + } + if( Type & VFS_SELECT_WRITE ) { + Node->WriteThreads = (void*)us; + if(!Node->BufferFull) ret |= VFS_SELECT_WRITE; + } + if( Type & VFS_SELECT_ERROR ) { + Node->ErrorThreads = (void*)us; + if(Node->ErrorOccurred) ret |= VFS_SELECT_ERROR; + } - return 0; + if( !ret ) + { + // TODO: Timeout + Threads_WaitEvents(THREAD_EVENT_VFS); + } + + if( Type & VFS_SELECT_READ ) { + Node->ReadThreads = NULL; + if(Node->DataAvaliable) ret |= VFS_SELECT_READ; + } + if( Type & VFS_SELECT_WRITE ) { + Node->WriteThreads = NULL; + if(!Node->BufferFull) ret |= VFS_SELECT_WRITE; + } + if( Type & VFS_SELECT_ERROR ) { + Node->ErrorThreads = NULL; + if(Node->ErrorOccurred) ret |= VFS_SELECT_ERROR; + } + return ret; } int VFS_MarkAvaliable(tVFS_Node *Node, BOOL bAvail) @@ -32,6 +68,15 @@ int VFS_MarkError(tVFS_Node *Node, BOOL bError) return 0; } +int VFS_MarkFull(tVFS_Node *Node, BOOL bError) +{ + Node->BufferFull = bError; + if( !Node->BufferFull && Node->WriteThreads ) + Threads_PostEvent( (void*)Node->WriteThreads, THREAD_EVENT_VFS ); + return 0; +} + + #if 0 int VFS_Open(const char *Path, Uint Flags) {