#include "pool.h"

VOID LibFreePooled(POOL *poolHeader, APTR memory, ULONG memSize)
{
  if (SysBase->LibNode.lib_Version>=39)
    return (FreePooled(poolHeader,memory,memSize));
  else {

    if (poolHeader!=NULL && memory!=NULL) {

      ULONG size,*puddle=(ULONG *)((struct MinNode *)memory-1)-1;

      if (poolHeader->ThreshSize>memSize) {

        struct MemHeader *a=(struct MemHeader *)&poolHeader->PuddleList.mlh_Head;

        for(;;) {
          a=(struct MemHeader *)a->mh_Node.ln_Succ;
          if (a->mh_Node.ln_Succ==NULL)
            return;
          if (a->mh_Node.ln_Type && memory>=a->mh_Lower && memory<a->mh_Upper)
            break;
        }
        Deallocate(a,memory,memSize);
        if (a->mh_Free!=poolHeader->PuddleSize)
          return;
        puddle=(ULONG *)&a->mh_Node;
      }
      Remove((struct Node *)puddle);
      size=*--puddle; FreeMem(puddle,size);
    }
  }
}
