diff options
author | David Timber <mieabby@gmail.com> | 2020-01-19 13:12:29 +1100 |
---|---|---|
committer | David Timber <mieabby@gmail.com> | 2020-01-19 13:12:29 +1100 |
commit | d328cbbdc256197d02ec03eef0022b4122d38bb8 (patch) | |
tree | 088f711afe755ef99c28955fab716a0752e47029 /src/pack.h | |
parent | a9762b186c68797c19c61bf0284a80d9bc51a2ca (diff) |
bin pack redesign. resolv bug fix
Diffstat (limited to 'src/pack.h')
-rw-r--r-- | src/pack.h | 66 |
1 files changed, 36 insertions, 30 deletions
@@ -4,45 +4,51 @@ #include "protocol.h" - +struct prne_bin_tuple; +struct prne_bin_archive; +struct prne_pack_ret; +struct prne_unpack_ctx; +typedef struct prne_bin_tuple prne_bin_tuple_t; typedef struct prne_bin_archive prne_bin_archive_t; -typedef struct prne_unpack_bin_archive_result prne_unpack_bin_archive_result_t; +typedef struct prne_pack_ret prne_pack_ret_t; +typedef struct prne_unpack_ctx* prne_unpack_ctx_pt; + +typedef enum { + PRNE_PACK_RC_OK, + PRNE_PACK_RC_FMT_ERR, + PRNE_PACK_RC_ERRNO, + PRNE_PACK_RC_Z_ERR, + PRNE_PACK_RC_MBEDTLS_ERR, + PRNE_PACK_RC_NO_BIN, +} prne_pack_rc_t; + +struct prne_bin_tuple { + prne_arch_t arch; + size_t offset; + size_t size; +}; struct prne_bin_archive { - size_t data_size; uint8_t *data; - size_t nb_binaries; - prne_arch_t *arch_arr; - size_t *offset_arr; - size_t *size_arr; + size_t data_size; + size_t nb_bin; + prne_bin_tuple_t *bin; }; -typedef enum { - PRNE_UNPACK_BIN_ARCHIVE_OK, - PRNE_UNPACK_BIN_ARCHIVE_CRYPTO_ERR, - PRNE_UNPACK_BIN_ARCHIVE_Z_ERR, - PRNE_UNPACK_BIN_ARCHIVE_ERRNO, - PRNE_UNPACK_BIN_ARCHIVE_MEM_ERR, - PRNE_UNPACK_BIN_ARCHIVE_FMT_ERR -} prne_unpack_bin_archive_result_code_t; - -struct prne_unpack_bin_archive_result { - size_t data_size; - uint8_t *data; - prne_unpack_bin_archive_result_code_t result; - long err; +struct prne_pack_ret { + prne_pack_rc_t rc; + int err; }; -typedef enum { - PRNE_INDEX_BIN_ARCHIVE_OK, - PRNE_INDEX_BIN_ARCHIVE_FMT_ERR, - PRNE_INDEX_BIN_ARCHIVE_MEM_ERR -} prne_index_bin_archive_result_code_t; +typedef prne_pack_ret_t(*prne_bin_archive_read_ft)(void *ctx, const size_t req, uint8_t *out, size_t *out_len); void prne_init_bin_archive (prne_bin_archive_t *a); -void prne_init_unpack_bin_archive_result (prne_unpack_bin_archive_result_t *r); -prne_unpack_bin_archive_result_t prne_unpack_bin_archive (const int fd); -prne_index_bin_archive_result_code_t prne_index_bin_archive (prne_unpack_bin_archive_result_t *in, prne_bin_archive_t *out); -void prne_free_unpack_bin_archive_result (prne_unpack_bin_archive_result_t *r); void prne_free_bin_archive (prne_bin_archive_t *a); +prne_pack_ret_t prne_index_bin_archive (void *rf_ctx, prne_bin_archive_read_ft rf, prne_bin_archive_t *out); + +prne_unpack_ctx_pt prne_alloc_unpack_ctx (const prne_bin_archive_t *archive, const prne_arch_t arch, prne_pack_ret_t *pr_out); +void prne_free_unpack_ctx (prne_unpack_ctx_pt ctx); +ssize_t prne_do_unpack (prne_unpack_ctx_pt ctx, uint8_t *out, const size_t out_len, prne_pack_ret_t *pr_out); + +char *prne_pack_ret_tostr (const prne_pack_ret_t pr); |