home *** CD-ROM | disk | FTP | other *** search
- #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);
- }
- }
- }
-