From df1cd0fea39ba9623c85b0b34d3374d961144f3a Mon Sep 17 00:00:00 2001 From: norly Date: Thu, 20 Jun 2013 22:56:34 +0100 Subject: [PATCH] Cleaner ElfuPhdr alloc --- include/libelfu/modelops.h | 7 ++++--- src/libelfu/model/phdr.c | 26 ++++++++++++++++++++++++++ src/libelfu/modelops/fromFile.c | 6 +----- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/include/libelfu/modelops.h b/include/libelfu/modelops.h index 4dacd43..3dc44d8 100644 --- a/include/libelfu/modelops.h +++ b/include/libelfu/modelops.h @@ -18,8 +18,9 @@ void elfu_mSymtabFlatten(ElfuElf *me); void elfu_mRelocate(ElfuElf *metarget, ElfuScn *mstarget, ElfuScn *msrt); -size_t elfu_mPhdrCount(ElfuElf *me); -void elfu_mPhdrUpdateChildOffsets(ElfuPhdr *mp); + size_t elfu_mPhdrCount(ElfuElf *me); + void elfu_mPhdrUpdateChildOffsets(ElfuPhdr *mp); +ElfuPhdr* elfu_mPhdrAlloc(); typedef void* (SectionHandlerFunc)(ElfuElf *me, ElfuScn *ms, void *aux1, void *aux2); @@ -29,7 +30,7 @@ typedef void* (SectionHandlerFunc)(ElfuElf *me, ElfuScn *ms, void *aux1, void *a ElfuScn* elfu_mScnByOldscn(ElfuElf *me, ElfuScn *oldscn); char* elfu_mScnName(ElfuElf *me, ElfuScn *ms); ElfuScn** elfu_mScnSortedByOffset(ElfuElf *me, size_t *count); -ElfuScn* elfu_mScnAlloc(); + ElfuScn* elfu_mScnAlloc(); GElf_Addr elfu_mLayoutGetSpaceInPhdr(ElfuElf *me, GElf_Word size, diff --git a/src/libelfu/model/phdr.c b/src/libelfu/model/phdr.c index d26eb77..ce395ec 100644 --- a/src/libelfu/model/phdr.c +++ b/src/libelfu/model/phdr.c @@ -1,4 +1,6 @@ #include +#include +#include #include @@ -34,3 +36,27 @@ void elfu_mPhdrUpdateChildOffsets(ElfuPhdr *mp) ms->shdr.sh_offset = mp->phdr.p_offset + (ms->shdr.sh_addr - mp->phdr.p_vaddr); } } + + + +/* + * Allocation, destruction + */ + +ElfuPhdr* elfu_mPhdrAlloc() +{ + ElfuPhdr *mp; + + mp = malloc(sizeof(ElfuPhdr)); + if (!mp) { + ELFU_WARN("mPhdrAlloc: malloc() failed for ElfuPhdr.\n"); + return NULL; + } + + memset(mp, 0, sizeof(*mp)); + + CIRCLEQ_INIT(&mp->childScnList); + CIRCLEQ_INIT(&mp->childPhdrList); + + return mp; +} diff --git a/src/libelfu/modelops/fromFile.c b/src/libelfu/modelops/fromFile.c index 9c25e29..8e1bb81 100644 --- a/src/libelfu/modelops/fromFile.c +++ b/src/libelfu/modelops/fromFile.c @@ -185,17 +185,13 @@ static ElfuPhdr* modelFromPhdr(GElf_Phdr *phdr) assert(phdr); - mp = malloc(sizeof(ElfuPhdr)); + mp = elfu_mPhdrAlloc(); if (!mp) { - ELFU_WARN("modelFromPhdr: malloc() failed for ElfuPhdr.\n"); return NULL; } mp->phdr = *phdr; - CIRCLEQ_INIT(&mp->childScnList); - CIRCLEQ_INIT(&mp->childPhdrList); - return mp; } -- 2.30.2