summaryrefslogtreecommitdiffhomepage
path: root/src/archive/mdso_argen_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/archive/mdso_argen_common.c')
-rw-r--r--src/archive/mdso_argen_common.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/archive/mdso_argen_common.c b/src/archive/mdso_argen_common.c
index a2553c0..2d2f3c5 100644
--- a/src/archive/mdso_argen_common.c
+++ b/src/archive/mdso_argen_common.c
@@ -1,6 +1,6 @@
/****************************************************************/
/* mdso: midipix dso scavenger */
-/* Copyright (C) 2015--2017 Z. Gilboa */
+/* Copyright (C) 2015--2024 SysDeer Technologies, LLC */
/* Released under GPLv2 and GPLv3; see COPYING.MDSO. */
/****************************************************************/
@@ -11,16 +11,31 @@
#include <sys/mman.h>
#include <mdso/mdso.h>
+#include "mdso_object_impl.h"
#include "mdso_errinfo_impl.h"
#include "perk_structs.h"
+static void mdso_obj_write_objname(char * ch, off_t objidx)
+{
+ ch[0] = 's';
+
+ ch[6] = (objidx % 10) + '0'; objidx /= 10;
+ ch[5] = (objidx % 10) + '0'; objidx /= 10;
+ ch[4] = (objidx % 10) + '0'; objidx /= 10;
+ ch[3] = (objidx % 10) + '0'; objidx /= 10;
+ ch[2] = (objidx % 10) + '0'; objidx /= 10;
+ ch[1] = (objidx % 10) + '0'; objidx /= 10;
+
+ ch[7] = '.';
+ ch[8] = 'o';
+}
+
static void mdso_argen_common_hdr(
struct pe_raw_archive_common_hdr * arhdr,
char * file_id,
size_t size)
{
size_t slen;
- char sbuf[10];
memset(arhdr,0x20,sizeof(*arhdr));
@@ -33,8 +48,7 @@ static void mdso_argen_common_hdr(
arhdr->ar_file_mode[0] = '0';
arhdr->ar_time_date_stamp[0] = '0';
- slen = sprintf(sbuf,"%zu",size);
- memcpy(arhdr->ar_file_size,sbuf,slen);
+ mdso_obj_write_dec(arhdr->ar_file_size,size);
arhdr->ar_end_tag[0] = 0x60;
arhdr->ar_end_tag[1] = 0x0a;
@@ -138,10 +152,6 @@ int mdso_argen_common(
objlen += sizeof(uint32_t) * (1 + mapstrsnum);
objlen += mapstrslen;
- objlen += 15;
- objlen |= 15;
- objlen ^= 15;
-
/* archive meta info, in-memory mapping */
if (vobj->addr && (vobj->size < objlen))
return MDSO_BUFFER_ERROR(dctx);
@@ -216,9 +226,7 @@ int mdso_argen_common(
idx += sizeof(uint32_t);
}
- sprintf(
- objname,"s%06zu.o",
- psym - symv);
+ mdso_obj_write_objname(objname,psym - symv);
ret = mdso_objgen_symentry(dctx,*psym,pobj);