Object file injection, first part
[centaur.git] / src / model / count.c
index d42f806c6dba14974cf03e9b12817dc8333188e3..671767e04b1b0fa01967a09bfaec1865a8d806a5 100644 (file)
@@ -1,13 +1,37 @@
+#include <assert.h>
 #include <sys/types.h>
 #include <libelfu/libelfu.h>
 
 
+size_t elfu_mScnIndex(ElfuElf *me, ElfuScn *ms)
+{
+  ElfuScn *ms2;
+  size_t i = 1;
+
+  assert(me);
+  assert(ms);
+
+  CIRCLEQ_FOREACH(ms2, &me->scnList, elem) {
+    if (ms2 == ms) {
+      return i;
+    }
+
+    i++;
+  }
 
-size_t elfu_countSections(ElfuElf *me)
+  /* Section is not in ELF model. This means the calling code is broken. */
+  assert(0);
+}
+
+
+/* NULL section is not counted! */
+size_t elfu_mCountScns(ElfuElf *me)
 {
   ElfuScn *ms;
   size_t i = 0;
 
+  assert(me);
+
   CIRCLEQ_FOREACH(ms, &me->scnList, elem) {
     i++;
   }
@@ -16,11 +40,13 @@ size_t elfu_countSections(ElfuElf *me)
 }
 
 
-size_t elfu_countPHDRs(ElfuElf *me)
+size_t elfu_mCountPhdrs(ElfuElf *me)
 {
   ElfuPhdr *mp;
   size_t i = 0;
 
+  assert(me);
+
   CIRCLEQ_FOREACH(mp, &me->phdrList, elem) {
     i++;
   }