#ident "$URL: svn://elmer/devel/SVN/SDDAS/trunk/libCfg/P_Free.c $ %D% SwRI" #include #include #include "libCfg.h" #include "StrHier.h" #include "Destroy.h" #include "libCfg_local.h" /* * LinkList * - pointer to root of Projects tree * * This routine frees up all memory associated with the Projects tree */ void aP_Free(LinkList P) { StrHier S; LinkList Last, NextToLast; DestroyObj_t *Destroy; if (P == NULL) return; S = (StrHier) P->data; NextToLast = NULL; for (Last=P ; Last->next; Last=Last->next) NextToLast=Last; S = (StrHier) Last->data; if (S->sublist) { aP_Free(S->sublist); S->sublist = (LinkList)0; if (P == Last) { Destroy = ((VoidFree_t *)Last->data)->Destroy; if (Destroy) (Destroy->Free)(Last->data); free(Last); return; } } else { Destroy = ((VoidFree_t *)Last->data)->Destroy; if (Destroy) (Destroy->Free)(Last->data); free(Last); if (NextToLast) NextToLast->next = (LinkList)0; } if (P != Last) aP_Free(P); return; }