X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fvfs_handle.c;h=93b6a9d674d7354fbb65b8cce57566f1fa7eda6c;hb=3c283c4831c40c14d308a54cefb997832a860bca;hp=eb0bfc58509790e1622d9f24ed65f223fd9daa3f;hpb=e7a76b0d8a0cc6aa77966509780973a6f8216ef7;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/vfs_handle.c b/AcessNative/acesskernel_src/vfs_handle.c index eb0bfc58..93b6a9d6 100644 --- a/AcessNative/acesskernel_src/vfs_handle.c +++ b/AcessNative/acesskernel_src/vfs_handle.c @@ -79,7 +79,7 @@ void VFS_CloneHandleList(int PID) ent = VFS_int_GetUserHandles(PID, 1); - maxhandles = *Threads_GetMaxFD(); + maxhandles = *Threads_GetMaxFD(NULL); memcpy(ent->Handles, cur->Handles, maxhandles*sizeof(tVFS_Handle)); // Reference all @@ -105,7 +105,7 @@ void VFS_CloneHandlesFromList(int PID, int nFD, int FDs[]) LOG("Copying %i FDs from %i", nFD, PID); - maxhandles = *Threads_GetMaxFD(); + maxhandles = *Threads_GetMaxFD(NULL); if( nFD > maxhandles ) nFD = maxhandles; for( int i = 0; i < nFD; i ++ ) @@ -155,11 +155,10 @@ tVFS_Handle *VFS_GetHandle(int FD) } else { - tUserHandles *ent; int pid = Threads_GetPID(); - int maxhandles = *Threads_GetMaxFD(); + int maxhandles = *Threads_GetMaxFD(NULL); - ent = VFS_int_GetUserHandles(pid, 0); + tUserHandles *ent = VFS_int_GetUserHandles(pid, 0); if(!ent) { Log_Error("VFS", "Client %i does not have a handle list (>)", pid); return NULL; @@ -194,7 +193,7 @@ int VFS_SetHandle(int FD, tVFS_Node *Node, int Mode) else { tUserHandles *ent; int pid = Threads_GetPID(); - int maxhandles = *Threads_GetMaxFD(); + int maxhandles = *Threads_GetMaxFD(NULL); ent = VFS_int_GetUserHandles(pid, 0); if(!ent) { @@ -220,7 +219,7 @@ int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode) if(bIsUser) { tUserHandles *ent; - int maxhandles = *Threads_GetMaxFD(); + int maxhandles = *Threads_GetMaxFD(NULL); // Find the PID's handle list ent = VFS_int_GetUserHandles(Threads_GetPID(), 1); // Get a handle @@ -248,3 +247,18 @@ int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode) return -1; } + +void VFS_ClearHandles(int PID) +{ + // Find the PID's handle list + tUserHandles *ent = VFS_int_GetUserHandles(PID, 0); + if( !ent ) return; + // Get a handle + int maxhandles = *Threads_GetMaxFD(NULL); + for( int i = 0; i < maxhandles; i ++ ) + { + if(ent->Handles[i].Node) continue; + _CloseNode(ent->Handles[i].Node); + ent->Handles[i].Node = NULL; + } +}