summaryrefslogtreecommitdiff
path: root/src/model/clone.c
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2013-05-24 07:23:41 +0100
committernorly <ny-git@enpas.org>2013-05-24 07:23:41 +0100
commit264965b9323f90f1a834fb2d80c362aa91fbb5e5 (patch)
tree09fbfa898d674060970f5658b0c93b9a502d1693 /src/model/clone.c
parentb7ab2674931f1bb9a7e6da594f587ae84c293238 (diff)
Object file injection, first part
Diffstat (limited to 'src/model/clone.c')
-rw-r--r--src/model/clone.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/model/clone.c b/src/model/clone.c
new file mode 100644
index 0000000..3dbbc54
--- /dev/null
+++ b/src/model/clone.c
@@ -0,0 +1,35 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libelfu/libelfu.h>
+
+ElfuScn* elfu_mCloneScn(ElfuScn *ms)
+{
+ ElfuScn *newscn;
+
+ assert(ms);
+
+ newscn = malloc(sizeof(ElfuScn));
+ if (!newscn) {
+ ELFU_WARN("elfu_nCloneScn: Could not allocate memory for new ElfuScn.\n");
+ return NULL;
+ }
+
+
+
+ newscn->shdr = ms->shdr;
+ newscn->data = ms->data;
+ if (ms->data.d_buf) {
+ void *newbuf = malloc(ms->data.d_size);
+ if (!newbuf) {
+ ELFU_WARN("elfu_nCloneScn: Could not allocate memory for new data buffer.\n");
+ free(newscn);
+ return NULL;
+ }
+
+ memcpy(newbuf, ms->data.d_buf, ms->data.d_size);
+ newscn->data.d_buf = newbuf;
+ }
+
+ return newscn;
+}