summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2013-06-20 22:56:34 +0100
committernorly <ny-git@enpas.org>2013-06-20 22:56:34 +0100
commitdf1cd0fea39ba9623c85b0b34d3374d961144f3a (patch)
tree8ea23b795ff9cea3f934e6e3994e26f8e8a583db
parent70b271e345debda7437c18f86c0f715a42a8267a (diff)
Cleaner ElfuPhdr alloc
-rw-r--r--include/libelfu/modelops.h7
-rw-r--r--src/libelfu/model/phdr.c26
-rw-r--r--src/libelfu/modelops/fromFile.c6
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 <assert.h>
+#include <stdlib.h>
+#include <string.h>
#include <libelfu/libelfu.h>
@@ -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;
}