X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fvfs_handle.c;h=cfe048980469b9e75f96b3dede2cc3dbf7e082df;hb=45c91b880402af13c4b8f934c53780d7cba24aac;hp=91caeffe9a3a3fe9cc118e7f4970d992eac78c44;hpb=7f80ab30017689efe0aaaab18abc7ceda689d859;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/vfs_handle.c b/AcessNative/acesskernel_src/vfs_handle.c index 91caeffe..cfe04898 100644 --- a/AcessNative/acesskernel_src/vfs_handle.c +++ b/AcessNative/acesskernel_src/vfs_handle.c @@ -2,11 +2,12 @@ * Acess2 VFS * - AllocHandle, GetHandle */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include #include +#include // === CONSTANTS === #define MAX_KERNEL_FILES 128 @@ -37,7 +38,8 @@ tUserHandles *VFS_int_GetUserHandles(int PID, int bCreate) tUserHandles *ent, *prev = NULL; for( ent = gpUserHandles; ent; prev = ent, ent = ent->Next ) { if( ent->PID == PID ) { - Log_Warning("VFS", "Process %i already has a handle list", PID); + if( bCreate ) + Log_Warning("VFS", "Process %i already has a handle list", PID); return ent; } if( ent->PID > PID ) break; @@ -67,21 +69,22 @@ void VFS_CloneHandleList(int PID) { tUserHandles *ent; tUserHandles *cur; - int i; + int i, maxhandles; cur = VFS_int_GetUserHandles(Threads_GetPID(), 0); if(!cur) return ; // Don't need to do anything if the current list is empty ent = VFS_int_GetUserHandles(PID, 1); - memcpy(ent->Handles, cur->Handles, CFGINT(CFG_VFS_MAXFILES)*sizeof(tVFS_Handle)); + maxhandles = *Threads_GetMaxFD(); + memcpy(ent->Handles, cur->Handles, maxhandles*sizeof(tVFS_Handle)); - for( i = 0; i < CFGINT(CFG_VFS_MAXFILES); i ++ ) + for( i = 0; i < maxhandles; i ++ ) { if(!cur->Handles[i].Node) continue; - if(ent->Handles[i].Node->Reference) - ent->Handles[i].Node->Reference(ent->Handles[i].Node); + if(ent->Handles[i].Node->Type->Reference) + ent->Handles[i].Node->Type->Reference(ent->Handles[i].Node); } } @@ -112,6 +115,7 @@ tVFS_Handle *VFS_GetHandle(int FD) { tUserHandles *ent; int pid = Threads_GetPID(); + int maxhandles = *Threads_GetMaxFD(); ent = VFS_int_GetUserHandles(pid, 0); if(!ent) { @@ -119,8 +123,8 @@ tVFS_Handle *VFS_GetHandle(int FD) return NULL; } - if(FD >= CFGINT(CFG_VFS_MAXFILES)) { - LOG("FD (%i) > Limit (%i), RETURN NULL", FD, CFGINT(CFG_VFS_MAXFILES)); + if(FD >= maxhandles) { + LOG("FD (%i) > Limit (%i), RETURN NULL", FD, maxhandles); return NULL; } h = &ent->Handles[ FD ]; @@ -143,10 +147,11 @@ int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode) if(bIsUser) { tUserHandles *ent; + int maxhandles = *Threads_GetMaxFD(); // Find the PID's handle list ent = VFS_int_GetUserHandles(Threads_GetPID(), 1); // Get a handle - for(i=0;iHandles[i].Node) continue; ent->Handles[i].Node = Node;