#include #include #include #include #include #include #include #include "sha256.h" #include "lzma.h" /* TODO pass in the outbuf ? */ /* or wrap lzma_stream_buffer_bound */ void *compresslzma(void *buf, size_t bufsize, size_t *len) { /* xz compress it */ size_t outsize; void *outbuf; size_t outlen = 0; int err = LZMA_OK; outsize = lzma_stream_buffer_bound(bufsize); outbuf = malloc(outsize); if (!outbuf) { *len = 0; fprintf(stderr, "failed to malloc compression buffer\n"); return NULL; } /* TODO adjust encoding level for size */ switch (err = lzma_easy_buffer_encode(6, LZMA_CHECK_CRC64, NULL, buf, bufsize, outbuf, &outlen, outsize )) { case LZMA_OK: break; case LZMA_OPTIONS_ERROR: fprintf(stderr, "lzma options error\n"); default: fprintf(stderr, "lzma error %d\n", err); return NULL; break; } *len = outlen; return outbuf; }