home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / gcc / libnixV0_8.lha / gnu / libnix-sources.lha / sources / amiga / misc / LibFreePooled.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  971 b   |  39 lines

  1. #include "pool.h"
  2.  
  3. VOID LibFreePooled(APTR poolHeader, APTR memory, ULONG memSize)
  4. {
  5.   if (SysBase->LibNode.lib_Version>=39)
  6.     return (FreePooled(poolHeader,memory,memSize));
  7.   else
  8.   {
  9.     if (poolHeader!=NULL && memory!=NULL)
  10.     {
  11.       POOL *pool=(POOL *)poolHeader;
  12.       ULONG *puddle,size;
  13.  
  14.       if (pool->ThreshSize>memSize)
  15.       {
  16.         struct MemHeader *a=(struct MemHeader *)pool->PuddleList.mlh_Head;
  17.  
  18.         for(;;)
  19.          {
  20.            if (a->mh_Node.ln_Succ==NULL)
  21.              return;
  22.            if (memory>=a->mh_Lower && memory<a->mh_Upper)
  23.              break;
  24.            a=(struct MemHeader *)a->mh_Node.ln_Succ;
  25.          }
  26.         Deallocate(a,memory,memSize);
  27.         if (a->mh_Free!=pool->PuddleSize)
  28.           return;
  29.         puddle=(ULONG *)&a->mh_Node;
  30.       }
  31.       else
  32.         puddle=(ULONG *)((struct MinNode *)memory-1);
  33.       Remove((struct Node *)puddle);
  34.       size=*(--((ULONG *)puddle));
  35.       FreeMem(puddle,size);
  36.     }
  37.   }
  38. }
  39.