예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
0
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);
}