summaryrefslogtreecommitdiff
path: root/firmware/common/inflate.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common/inflate.c')
-rw-r--r--firmware/common/inflate.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/firmware/common/inflate.c b/firmware/common/inflate.c
index 26fd191690..62661ee111 100644
--- a/firmware/common/inflate.c
+++ b/firmware/common/inflate.c
@@ -43,6 +43,7 @@
43 43
44#include "inflate.h" 44#include "inflate.h"
45#include <stdbool.h> 45#include <stdbool.h>
46#include <string.h>
46#include "adler32.h" 47#include "adler32.h"
47#include "crc32.h" 48#include "crc32.h"
48#include "system.h" 49#include "system.h"
@@ -757,3 +758,27 @@ int inflate(struct inflate* it, int st, inflate_reader read, void* rctx, inflate
757 758
758 return inflate_blocks(it, st, read, rctx, write, wctx); 759 return inflate_blocks(it, st, read, rctx, write, wctx);
759} 760}
761
762static uint32_t inflate_buffer_rw(struct inflate_bufferctx* c,
763 void* dst, const void* src, uint32_t block_size)
764{
765 size_t size_left = c->end - c->buf;
766 size_t copy_size = MIN((size_t)block_size, size_left);
767
768 memcpy(dst, src, copy_size);
769 c->buf += copy_size;
770
771 return copy_size;
772}
773
774uint32_t inflate_buffer_reader(void* block, uint32_t block_size, void* ctx)
775{
776 struct inflate_bufferctx* c = ctx;
777 return inflate_buffer_rw(c, block, c->buf, block_size);
778}
779
780uint32_t inflate_buffer_writer(const void* block, uint32_t block_size, void* ctx)
781{
782 struct inflate_bufferctx* c = ctx;
783 return inflate_buffer_rw(c, c->buf, block, block_size);
784}