--- linux-2.6.30.9/lib/decompress_bunzip2.c 2009-10-05 18:38:08.000000000 +0300 +++ linux-2.6.30.9-rsdk/lib/decompress_bunzip2.c 2013-05-02 01:47:59.131226621 +0300 @@ -45,12 +45,15 @@ */ -#ifndef STATIC +#ifdef STATIC +#define PREBOOT +#else #include -#endif /* !STATIC */ +#include +#endif /* STATIC */ +#include #include -#include #ifndef INT_MAX #define INT_MAX 0x7fffffff @@ -681,9 +684,7 @@ STATIC int INIT bunzip2(unsigned char *b set_error_fn(error_fn); if (flush) outbuf = malloc(BZIP2_IOBUF_SIZE); - else - len -= 4; /* Uncompressed size hack active in pre-boot - environment */ + if (!outbuf) { error("Could not allocate output bufer"); return -1; @@ -733,4 +734,14 @@ exit_0: return i; } -#define decompress bunzip2 +#ifdef PREBOOT +STATIC int INIT decompress(unsigned char *buf, int len, + int(*fill)(void*, unsigned int), + int(*flush)(void*, unsigned int), + unsigned char *outbuf, + int *pos, + void(*error_fn)(char *x)) +{ + return bunzip2(buf, len - 4, fill, flush, outbuf, pos, error_fn); +} +#endif --- linux-2.6.30.9/lib/decompress_inflate.c 2009-10-05 18:38:08.000000000 +0300 +++ linux-2.6.30.9-rsdk/lib/decompress_inflate.c 2013-05-02 01:47:59.131226621 +0300 @@ -19,13 +19,19 @@ #include "zlib_inflate/inflate.h" #include "zlib_inflate/infutil.h" +#include #endif /* STATIC */ +#include #include -#include -#define INBUF_LEN (16*1024) +#define GZIP_IOBUF_SIZE (16*1024) + +static int nofill(void *buffer, unsigned int len) +{ + return -1; +} /* Included from initramfs et al code */ STATIC int INIT gunzip(unsigned char *buf, int len, @@ -55,7 +61,7 @@ STATIC int INIT gunzip(unsigned char *bu if (buf) zbuf = buf; else { - zbuf = malloc(INBUF_LEN); + zbuf = malloc(GZIP_IOBUF_SIZE); len = 0; } if (!zbuf) { @@ -76,8 +82,11 @@ STATIC int INIT gunzip(unsigned char *bu goto gunzip_nomem4; } + if (!fill) + fill = nofill; + if (len == 0) - len = fill(zbuf, INBUF_LEN); + len = fill(zbuf, GZIP_IOBUF_SIZE); /* verify the gzip header */ if (len < 10 || @@ -113,7 +122,7 @@ STATIC int INIT gunzip(unsigned char *bu while (rc == Z_OK) { if (strm->avail_in == 0) { /* TODO: handle case where both pos and fill are set */ - len = fill(zbuf, INBUF_LEN); + len = fill(zbuf, GZIP_IOBUF_SIZE); if (len < 0) { rc = -1; error("read error"); --- linux-2.6.30.9/lib/decompress_unlzma.c 2009-10-05 18:38:08.000000000 +0300 +++ linux-2.6.30.9-rsdk/lib/decompress_unlzma.c 2013-05-02 01:47:59.132226621 +0300 @@ -29,12 +29,15 @@ *Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef STATIC +#ifdef STATIC +#define PREBOOT +#else #include +#include #endif /* STATIC */ +#include #include -#include #define MIN(a, b) (((a) < (b)) ? (a) : (b)) @@ -80,6 +83,11 @@ struct rc { #define RC_MODEL_TOTAL_BITS 11 +static int nofill(void *buffer, unsigned int len) +{ + return -1; +} + /* Called twice: once at startup and once in rc_normalize() */ static void INIT rc_read(struct rc *rc) { @@ -95,7 +103,10 @@ static inline void INIT rc_init(struct r int (*fill)(void*, unsigned int), char *buffer, int buffer_size) { + if (fill) rc->fill = fill; + else + rc->fill = nofill; rc->buffer = (uint8_t *)buffer; rc->buffer_size = buffer_size; rc->buffer_end = rc->buffer + rc->buffer_size; @@ -521,7 +532,7 @@ static inline void INIT process_bit1(str -STATIC inline int INIT unlzma(unsigned char *buf, int in_len, +STATIC int INIT unlzma(unsigned char *buf, int in_len, int(*fill)(void*, unsigned int), int(*flush)(void*, unsigned int), unsigned char *output, @@ -543,9 +554,7 @@ STATIC inline int INIT unlzma(unsigned c int ret = -1; set_error_fn(error_fn); - if (!flush) - in_len -= 4; /* Uncompressed size hack active in pre-boot - environment */ + if (buf) inbuf = buf; else @@ -645,4 +654,17 @@ exit_0: return ret; } -#define decompress unlzma +#ifdef PREBOOT +STATIC int INIT decompress(unsigned char *buf, int in_len, + int(*fill)(void*, unsigned int), + int(*flush)(void*, unsigned int), + unsigned char *output, + int *posp, + void(*error_fn)(char *x) + ) +{ + return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn); +} +#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED) +EXPORT_SYMBOL(unlzma); +#endif --- linux-2.6.30.9/lib/Kconfig 2009-10-05 18:38:08.000000000 +0300 +++ linux-2.6.30.9-rsdk/lib/Kconfig 2013-05-02 01:47:59.126226621 +0300 @@ -10,6 +10,9 @@ menu "Library routines" config BITREVERSE tristate +config RATIONAL + boolean + config GENERIC_FIND_FIRST_BIT bool @@ -114,6 +117,9 @@ config DECOMPRESS_BZIP2 config DECOMPRESS_LZMA tristate +config DECOMPRESS_LZMA_NEEDED + boolean + # # Generic allocator support is selected if needed # @@ -191,4 +197,10 @@ config DISABLE_OBSOLETE_CPUMASK_FUNCTION config NLATTR bool +# +# Generic 64-bit atomic support is selected if needed +# +config GENERIC_ATOMIC64 + bool + endmenu