X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=src%2Flibelfu%2Fmodel%2Felf.c;fp=src%2Flibelfu%2Fmodel%2Felf.c;h=11346a5d11bac85448cf955df4a37d9e6995cbf5;hb=88a99f6bafe7140711fa0095043c856fd8c44dc7;hp=a25aa89e89637c5a1d0feccc2e0deec04b1f0084;hpb=50b85e44529f195bf8156e9c0045d8b017ee26f5;p=centaur.git diff --git a/src/libelfu/model/elf.c b/src/libelfu/model/elf.c index a25aa89..11346a5 100644 --- a/src/libelfu/model/elf.c +++ b/src/libelfu/model/elf.c @@ -29,22 +29,30 @@ ElfuElf* elfu_mElfAlloc() void elfu_mElfDestroy(ElfuElf* me) { - ElfuPhdr *mp; - ElfuScn *ms; - assert(me); - CIRCLEQ_INIT(&me->phdrList); - CIRCLEQ_INIT(&me->orphanScnList); + if (!CIRCLEQ_EMPTY(&me->phdrList)) { + ElfuPhdr *nextmp; - CIRCLEQ_FOREACH(mp, &me->phdrList, elem) { - CIRCLEQ_REMOVE(&me->phdrList, mp, elem); - elfu_mPhdrDestroy(mp); + nextmp = CIRCLEQ_FIRST(&me->phdrList); + while ((void*)nextmp != (void*)&me->phdrList) { + ElfuPhdr *curmp = nextmp; + nextmp = CIRCLEQ_NEXT(curmp, elem); + CIRCLEQ_REMOVE(&me->phdrList, curmp, elem); + elfu_mPhdrDestroy(curmp); + } } - CIRCLEQ_FOREACH(ms, &me->orphanScnList, elemChildScn) { - CIRCLEQ_REMOVE(&me->orphanScnList, ms, elemChildScn); - elfu_mScnDestroy(ms); + if (!CIRCLEQ_EMPTY(&me->orphanScnList)) { + ElfuScn *nextms; + + nextms = CIRCLEQ_FIRST(&me->orphanScnList); + while ((void*)nextms != (void*)&me->orphanScnList) { + ElfuScn *curms = nextms; + nextms = CIRCLEQ_NEXT(curms, elemChildScn); + CIRCLEQ_REMOVE(&me->orphanScnList, curms, elemChildScn); + elfu_mScnDestroy(curms); + } } free(me);