#ifndef __LZMA_H__
#define __LZMA_H__

#ifdef __KERNEL__
	#include <linux/kernel.h>
	#include <linux/sched.h>
	#include <linux/slab.h>
	#include <linux/vmalloc.h>
	#include <linux/init.h>
	#define LZMA_MALLOC vmalloc
	#define LZMA_FREE vfree
	#define PRINT_ERROR(msg) printk(KERN_WARNING #msg)
	#define INIT __init
	#define STATIC static
#else
	#include <stdint.h>
	#include <stdlib.h>
	#include <stdio.h>
	#include <unistd.h>
	#include <string.h>
	#include <asm/types.h>
	#include <errno.h>
	#include <linux/jffs2.h>
	#ifndef PAGE_SIZE
		extern int page_size;
		#define PAGE_SIZE page_size
	#endif
	#define LZMA_MALLOC malloc
	#define LZMA_FREE free
	#define PRINT_ERROR(msg) fprintf(stderr, msg)
	#define INIT
	#define STATIC
#endif

#include "lzma/LzmaDec.h"
#include "lzma/LzmaEnc.h"

#define LZMA_BEST_LEVEL (9)
#define LZMA_BEST_LC    (0)
#define LZMA_BEST_LP    (0)
#define LZMA_BEST_PB    (0)
#define LZMA_BEST_FB  (273)

#define LZMA_BEST_DICT(n) (((int)((n) / 2)) * 2)

static void *p_lzma_malloc(void *p, size_t size)
{
	if (size == 0)
		return NULL;

	return LZMA_MALLOC(size);
}

static void p_lzma_free(void *p, void *address)
{
	if (address != NULL)
		LZMA_FREE(address);
}

static ISzAlloc lzma_alloc = { .Alloc = p_lzma_malloc, .Free = p_lzma_free };

#endif
