From 2a53efebd80d4687f3137345d5680e29a79f208b Mon Sep 17 00:00:00 2001 From: Vasile Vilvoiu Date: Sun, 28 Nov 2021 17:47:09 +0200 Subject: Add API for retrieval of encoded buffer length. Closes #7. --- src/libecbor/ecbor_encoder.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/libecbor/ecbor_encoder.c') diff --git a/src/libecbor/ecbor_encoder.c b/src/libecbor/ecbor_encoder.c index 2b01094..eca207a 100644 --- a/src/libecbor/ecbor_encoder.c +++ b/src/libecbor/ecbor_encoder.c @@ -18,6 +18,7 @@ ecbor_initialize_encode (ecbor_encode_context_t *context, return ECBOR_ERR_NULL_OUTPUT_BUFFER; } + context->base = buffer; context->out_position = buffer; context->bytes_left = buffer_size; context->mode = ECBOR_MODE_ENCODE; @@ -35,6 +36,7 @@ ecbor_initialize_encode_streamed (ecbor_encode_context_t *context, return ECBOR_ERR_NULL_OUTPUT_BUFFER; } + context->base = buffer; context->out_position = buffer; context->bytes_left = buffer_size; context->mode = ECBOR_MODE_ENCODE_STREAMED; @@ -42,6 +44,26 @@ ecbor_initialize_encode_streamed (ecbor_encode_context_t *context, return ECBOR_OK; } + +ecbor_error_t +ecbor_get_encoded_buffer_size(const ecbor_encode_context_t *context, size_t *out_size) +{ + /* check parameters */ + if (context == NULL) { + return ECBOR_ERR_NULL_CONTEXT; + } + if (out_size == NULL) { + return ECBOR_ERR_NULL_PARAMETER; + } + /* check sanity */ + if (context->base > context->out_position) { + return ECBOR_ERR_INVALID_END_OF_BUFFER; + } + /* return length */ + *out_size = context->out_position - context->base; + return ECBOR_OK; +} + static ecbor_error_t ecbor_encode_uint (ecbor_encode_context_t *context, uint8_t major_type, uint64_t value) -- cgit v1.2.3