X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=src%2Flibelfu%2Fmodel%2Fphdr.c;h=6f31e6b742567c2ba094161372909bacc2d4c53d;hb=88a99f6bafe7140711fa0095043c856fd8c44dc7;hp=b694eb9598928b1e9ef38de2747cfab34ab633cd;hpb=50b85e44529f195bf8156e9c0045d8b017ee26f5;p=centaur.git diff --git a/src/libelfu/model/phdr.c b/src/libelfu/model/phdr.c index b694eb9..6f31e6b 100644 --- a/src/libelfu/model/phdr.c +++ b/src/libelfu/model/phdr.c @@ -194,19 +194,30 @@ ElfuPhdr* elfu_mPhdrAlloc() void elfu_mPhdrDestroy(ElfuPhdr* mp) { - ElfuPhdr *mp2; - ElfuScn *ms; - assert(mp); - CIRCLEQ_FOREACH(mp2, &mp->childPhdrList, elemChildPhdr) { - CIRCLEQ_REMOVE(&mp->childPhdrList, mp2, elemChildPhdr); - elfu_mPhdrDestroy(mp2); + if (!CIRCLEQ_EMPTY(&mp->childPhdrList)) { + ElfuPhdr *nextmp; + + nextmp = CIRCLEQ_FIRST(&mp->childPhdrList); + while ((void*)nextmp != (void*)&mp->childPhdrList) { + ElfuPhdr *curmp = nextmp; + nextmp = CIRCLEQ_NEXT(curmp, elemChildPhdr); + CIRCLEQ_REMOVE(&mp->childPhdrList, curmp, elemChildPhdr); + elfu_mPhdrDestroy(curmp); + } } - CIRCLEQ_FOREACH(ms, &mp->childScnList, elemChildScn) { - CIRCLEQ_REMOVE(&mp->childScnList, ms, elemChildScn); - elfu_mScnDestroy(ms); + if (!CIRCLEQ_EMPTY(&mp->childScnList)) { + ElfuScn *nextms; + + nextms = CIRCLEQ_FIRST(&mp->childScnList); + while ((void*)nextms != (void*)&mp->childScnList) { + ElfuScn *curms = nextms; + nextms = CIRCLEQ_NEXT(curms, elemChildScn); + CIRCLEQ_REMOVE(&mp->childScnList, curms, elemChildScn); + elfu_mScnDestroy(curms); + } } free(mp);