15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaLib.c -- LZMA library wrapper 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2008-08-05 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Igor Pavlov 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Public domain */ 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "LzmaEnc.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "LzmaDec.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "Alloc.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "LzmaLib.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void SzFree(void *p, void *address) { p = p; MyFree(address); } 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ISzAlloc g_Alloc = { SzAlloc, SzFree }; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char *outProps, size_t *outPropsSize, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int level, /* 0 <= level <= 9, default = 5 */ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int lc, /* 0 <= lc <= 8, default = 3 */ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int lp, /* 0 <= lp <= 4, default = 0 */ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pb, /* 0 <= pb <= 4, default = 2 */ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fb, /* 5 <= fb <= 273, default = 32 */ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int numThreads /* 1 or 2, default = 2 */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CLzmaEncProps props; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LzmaEncProps_Init(&props); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.level = level; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.dictSize = dictSize; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.lc = lc; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.lp = lp; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.pb = pb; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.fb = fb; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) props.numThreads = numThreads; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, &g_Alloc, &g_Alloc); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const unsigned char *props, size_t propsSize) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ELzmaStatus status; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 47