aboutsummaryrefslogtreecommitdiff
path: root/src/proone_pack.c
diff options
context:
space:
mode:
authorDavid Timber <david@lyset.snart.me>2019-12-31 02:52:35 +1100
committerDavid Timber <david@lyset.snart.me>2019-12-31 02:52:35 +1100
commit85d78af0cd8b809abc28491c46c648a242053044 (patch)
tree3205ee7fce91644b08b61dac624fc9cab448e6a1 /src/proone_pack.c
parentf765952dc8b77ad36e4f624086441d290e82bf66 (diff)
checkpoint
Diffstat (limited to 'src/proone_pack.c')
-rw-r--r--src/proone_pack.c48
1 files changed, 9 insertions, 39 deletions
diff --git a/src/proone_pack.c b/src/proone_pack.c
index 3d106a3..f9d8c3b 100644
--- a/src/proone_pack.c
+++ b/src/proone_pack.c
@@ -28,8 +28,6 @@ void proone_init_bin_archive (proone_bin_archive_t *a) {
void proone_init_unpack_bin_archive_result (proone_unpack_bin_archive_result_t *r) {
r->data_size = 0;
r->data = NULL;
- r->raw_data_size = 0;
- r->raw_data = NULL;
r->result = PROONE_UNPACK_BIN_ARCHIVE_OK;
r->err = 0;
}
@@ -82,21 +80,11 @@ proone_unpack_bin_archive_result_t proone_unpack_bin_archive (const int fd) {
break;
}
- ny_buf = realloc(ret.raw_data, ret.raw_data_size + fd_read_size);
- if (ny_buf == NULL) {
- ret.result = PROONE_UNPACK_BIN_ARCHIVE_MEM_ERR;
- ret.err = errno;
- goto END;
- }
- ret.raw_data = (uint8_t*)ny_buf;
- memcpy(ret.raw_data + ret.raw_data_size, fd_buf, fd_read_size);
- ret.raw_data_size += fd_read_size;
-
// remove white spaces
fd_data_size = fd_read_size;
- for (i = 0; i < fd_data_size; ) {
+ for (i = 0; i < (size_t)fd_data_size; ) {
if (isspace(fd_buf[i])) {
- if (i + 1 >= fd_data_size) {
+ if (i + 1 >= (size_t)fd_data_size) {
// last trailing whitespace
fd_data_size -= 1;
break;
@@ -167,11 +155,8 @@ END:
if (ret.result != PROONE_UNPACK_BIN_ARCHIVE_OK) {
free(ret.data);
- free(ret.raw_data);
ret.data = NULL;
ret.data_size = 0;
- ret.raw_data = NULL;
- ret.raw_data_size = 0;
}
return ret;
@@ -179,13 +164,12 @@ END:
proone_index_bin_archive_result_code_t proone_index_bin_archive (proone_unpack_bin_archive_result_t *in, proone_bin_archive_t *out) {
proone_index_bin_archive_result_code_t ret = PROONE_INDEX_BIN_ARCHIVE_OK;
- size_t buf_pos = 0, arr_cnt = 0, offset_arr[NB_PROONE_ARCH], size_arr[NB_PROONE_ARCH], i;
+ size_t buf_pos = 0, arr_cnt = 0, offset_arr[NB_PROONE_ARCH], size_arr[NB_PROONE_ARCH];
proone_arch_t arch;
uint32_t bin_size;
proone_arch_t arch_arr[NB_PROONE_ARCH];
proone_bin_archive_t archive;
uint8_t *out_buf;
- void *ny_buf;
memset(arch_arr, 0, sizeof(proone_arch_t) * NB_PROONE_ARCH);
memset(offset_arr, 0, sizeof(size_t) * NB_PROONE_ARCH);
@@ -225,27 +209,16 @@ proone_index_bin_archive_result_code_t proone_index_bin_archive (proone_unpack_b
archive.offset_arr = (size_t*)(out_buf + sizeof(proone_arch_t) * arr_cnt);
archive.size_arr = (size_t*)(out_buf + sizeof(proone_arch_t) * arr_cnt + sizeof(size_t*) * arr_cnt);
+ archive.data_size = in->data_size;
+ archive.data = in->data;
archive.nb_binaries = arr_cnt;
- buf_pos = 0;
- for (i = 0; i < arr_cnt; i += 1) {
- memmove(in->data + buf_pos, in->data + offset_arr[i], size_arr[i]);
- archive.arch_arr[i] = arch_arr[i];
- archive.offset_arr[i] = buf_pos;
- archive.size_arr[i] = size_arr[i];
- buf_pos += size_arr[i];
- }
+ memcpy(archive.arch_arr, arch_arr, arr_cnt * sizeof(proone_arch_t));
+ memcpy(archive.offset_arr, offset_arr, arr_cnt * sizeof(size_t));
+ memcpy(archive.size_arr, size_arr, arr_cnt * sizeof(size_t));
- ny_buf = realloc(in->data, buf_pos);
- if (ny_buf == NULL) {
- ret = PROONE_INDEX_BIN_ARCHIVE_MEM_ERR;
- goto END;
- }
- archive.data = (uint8_t*)ny_buf;
- archive.data_size = buf_pos;
-
- *out = archive;
in->data = NULL;
in->data_size = 0;
+ *out = archive;
END:
if (ret != PROONE_INDEX_BIN_ARCHIVE_OK) {
@@ -257,11 +230,8 @@ END:
void proone_free_unpack_bin_archive_result (proone_unpack_bin_archive_result_t *r) {
free(r->data);
- free(r->raw_data);
r->data = NULL;
r->data_size = 0;
- r->raw_data = NULL;
- r->raw_data_size = 0;
r->result = PROONE_INDEX_BIN_ARCHIVE_OK;
r->err = 0;
}