ULONG CollectionPurgeFunc ( struct Hook * hook, struct LocalContextItem * lci, ULONG p ) { struct CIPtr *ciptr; struct CollectionItem *node, *nextnode; /* Read the LCI's userdata */ ciptr = (struct CIPtr*)LocalItemData(lci); /* Free all collectionitems in the linked list */ node = ciptr->FirstCI; while (node) { nextnode = node->ci_Next; if (node->ci_Data) FreeMem(node->ci_Data, node->ci_Size); FreeMem(node,sizeof (struct CollectionItem)); node = nextnode; } /* Free the local item itself */ FreeLocalItem(lci); return 0; }
VOID CF_FreeResources (struct CF_ResourceInfo * ri, struct IFFParseBase_intern * IFFParseBase) { if (ri->LCIStored) Remove((struct Node*)ri->LCI); if (ri->LCI) FreeLocalItem(ri->LCI); if (ri->Buffer) FreeMem(ri->Buffer, ri->BufferSize); if (ri->CollItem) FreeMem(ri->CollItem, sizeof (struct CollectionItem)); return; }
VOID PurgeLCI(struct LocalContextItem *lci, struct IFFParseBase_intern *IFFParseBase) { /* Look in the RKM SetLocalItemPurge autodoc for explanation on that one below */ D(bug("PurgeLCI(lci=%p)\n", lci)); Remove((struct Node*)lci); /* Has the user specified a Purge hook ? */ if ( GetIntLCI(lci)->lci_PurgeHook) CallHookPkt ( GetIntLCI(lci)->lci_PurgeHook, lci, (APTR)IFFCMD_PURGELCI ); else FreeLocalItem(lci); }