Cleaner ElfuPhdr alloc
authornorly <ny-git@enpas.org>
Thu, 20 Jun 2013 21:56:34 +0000 (22:56 +0100)
committernorly <ny-git@enpas.org>
Thu, 20 Jun 2013 21:56:34 +0000 (22:56 +0100)
include/libelfu/modelops.h
src/libelfu/model/phdr.c
src/libelfu/modelops/fromFile.c

index 4dacd43235fd88f80eb5d2d2dfb73062d579a962..3dc44d854b611a810649fa0885c1e91b4e30b87c 100644 (file)
@@ -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,
index d26eb772a3c5f1c10fe037f46ce160d2faaa29fe..ce395ec2b5e78999ec76040e126a4b9dd42f72db 100644 (file)
@@ -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;
+}
index 9c25e291dc5450729ed6523b0e0e5d08386e8287..8e1bb8111826438fae5a1b9b0b2059a37b6b424f 100644 (file)
@@ -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;
 }