diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/decompress_bunzip2.c | 24 | ||||
| -rw-r--r-- | lib/decompress_inflate.c | 10 | ||||
| -rw-r--r-- | lib/decompress_unlzma.c | 23 | ||||
| -rw-r--r-- | lib/flex_array.c | 2 |
4 files changed, 39 insertions, 20 deletions
diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c index 708e2a86d87b..600f473a5610 100644 --- a/lib/decompress_bunzip2.c +++ b/lib/decompress_bunzip2.c | |||
| @@ -45,12 +45,14 @@ | |||
| 45 | */ | 45 | */ |
| 46 | 46 | ||
| 47 | 47 | ||
| 48 | #ifndef STATIC | 48 | #ifdef STATIC |
| 49 | #define PREBOOT | ||
| 50 | #else | ||
| 49 | #include <linux/decompress/bunzip2.h> | 51 | #include <linux/decompress/bunzip2.h> |
| 50 | #endif /* !STATIC */ | 52 | #include <linux/slab.h> |
| 53 | #endif /* STATIC */ | ||
| 51 | 54 | ||
| 52 | #include <linux/decompress/mm.h> | 55 | #include <linux/decompress/mm.h> |
| 53 | #include <linux/slab.h> | ||
| 54 | 56 | ||
| 55 | #ifndef INT_MAX | 57 | #ifndef INT_MAX |
| 56 | #define INT_MAX 0x7fffffff | 58 | #define INT_MAX 0x7fffffff |
| @@ -681,9 +683,7 @@ STATIC int INIT bunzip2(unsigned char *buf, int len, | |||
| 681 | set_error_fn(error_fn); | 683 | set_error_fn(error_fn); |
| 682 | if (flush) | 684 | if (flush) |
| 683 | outbuf = malloc(BZIP2_IOBUF_SIZE); | 685 | outbuf = malloc(BZIP2_IOBUF_SIZE); |
| 684 | else | 686 | |
| 685 | len -= 4; /* Uncompressed size hack active in pre-boot | ||
| 686 | environment */ | ||
| 687 | if (!outbuf) { | 687 | if (!outbuf) { |
| 688 | error("Could not allocate output bufer"); | 688 | error("Could not allocate output bufer"); |
| 689 | return -1; | 689 | return -1; |
| @@ -733,4 +733,14 @@ exit_0: | |||
| 733 | return i; | 733 | return i; |
| 734 | } | 734 | } |
| 735 | 735 | ||
| 736 | #define decompress bunzip2 | 736 | #ifdef PREBOOT |
| 737 | STATIC int INIT decompress(unsigned char *buf, int len, | ||
| 738 | int(*fill)(void*, unsigned int), | ||
| 739 | int(*flush)(void*, unsigned int), | ||
| 740 | unsigned char *outbuf, | ||
| 741 | int *pos, | ||
| 742 | void(*error_fn)(char *x)) | ||
| 743 | { | ||
| 744 | return bunzip2(buf, len - 4, fill, flush, outbuf, pos, error_fn); | ||
| 745 | } | ||
| 746 | #endif | ||
diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c index e36b296fc9f8..68dfce59c1b8 100644 --- a/lib/decompress_inflate.c +++ b/lib/decompress_inflate.c | |||
| @@ -19,13 +19,13 @@ | |||
| 19 | #include "zlib_inflate/inflate.h" | 19 | #include "zlib_inflate/inflate.h" |
| 20 | 20 | ||
| 21 | #include "zlib_inflate/infutil.h" | 21 | #include "zlib_inflate/infutil.h" |
| 22 | #include <linux/slab.h> | ||
| 22 | 23 | ||
| 23 | #endif /* STATIC */ | 24 | #endif /* STATIC */ |
| 24 | 25 | ||
| 25 | #include <linux/decompress/mm.h> | 26 | #include <linux/decompress/mm.h> |
| 26 | #include <linux/slab.h> | ||
| 27 | 27 | ||
| 28 | #define INBUF_LEN (16*1024) | 28 | #define GZIP_IOBUF_SIZE (16*1024) |
| 29 | 29 | ||
| 30 | /* Included from initramfs et al code */ | 30 | /* Included from initramfs et al code */ |
| 31 | STATIC int INIT gunzip(unsigned char *buf, int len, | 31 | STATIC int INIT gunzip(unsigned char *buf, int len, |
| @@ -55,7 +55,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len, | |||
| 55 | if (buf) | 55 | if (buf) |
| 56 | zbuf = buf; | 56 | zbuf = buf; |
| 57 | else { | 57 | else { |
| 58 | zbuf = malloc(INBUF_LEN); | 58 | zbuf = malloc(GZIP_IOBUF_SIZE); |
| 59 | len = 0; | 59 | len = 0; |
| 60 | } | 60 | } |
| 61 | if (!zbuf) { | 61 | if (!zbuf) { |
| @@ -77,7 +77,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len, | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | if (len == 0) | 79 | if (len == 0) |
| 80 | len = fill(zbuf, INBUF_LEN); | 80 | len = fill(zbuf, GZIP_IOBUF_SIZE); |
| 81 | 81 | ||
| 82 | /* verify the gzip header */ | 82 | /* verify the gzip header */ |
| 83 | if (len < 10 || | 83 | if (len < 10 || |
| @@ -113,7 +113,7 @@ STATIC int INIT gunzip(unsigned char *buf, int len, | |||
| 113 | while (rc == Z_OK) { | 113 | while (rc == Z_OK) { |
| 114 | if (strm->avail_in == 0) { | 114 | if (strm->avail_in == 0) { |
| 115 | /* TODO: handle case where both pos and fill are set */ | 115 | /* TODO: handle case where both pos and fill are set */ |
| 116 | len = fill(zbuf, INBUF_LEN); | 116 | len = fill(zbuf, GZIP_IOBUF_SIZE); |
| 117 | if (len < 0) { | 117 | if (len < 0) { |
| 118 | rc = -1; | 118 | rc = -1; |
| 119 | error("read error"); | 119 | error("read error"); |
diff --git a/lib/decompress_unlzma.c b/lib/decompress_unlzma.c index 32123a1340e6..0b954e04bd30 100644 --- a/lib/decompress_unlzma.c +++ b/lib/decompress_unlzma.c | |||
| @@ -29,12 +29,14 @@ | |||
| 29 | *Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 29 | *Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | #ifndef STATIC | 32 | #ifdef STATIC |
| 33 | #define PREBOOT | ||
| 34 | #else | ||
| 33 | #include <linux/decompress/unlzma.h> | 35 | #include <linux/decompress/unlzma.h> |
| 36 | #include <linux/slab.h> | ||
| 34 | #endif /* STATIC */ | 37 | #endif /* STATIC */ |
| 35 | 38 | ||
| 36 | #include <linux/decompress/mm.h> | 39 | #include <linux/decompress/mm.h> |
| 37 | #include <linux/slab.h> | ||
| 38 | 40 | ||
| 39 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) | 41 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
| 40 | 42 | ||
| @@ -543,9 +545,7 @@ STATIC inline int INIT unlzma(unsigned char *buf, int in_len, | |||
| 543 | int ret = -1; | 545 | int ret = -1; |
| 544 | 546 | ||
| 545 | set_error_fn(error_fn); | 547 | set_error_fn(error_fn); |
| 546 | if (!flush) | 548 | |
| 547 | in_len -= 4; /* Uncompressed size hack active in pre-boot | ||
| 548 | environment */ | ||
| 549 | if (buf) | 549 | if (buf) |
| 550 | inbuf = buf; | 550 | inbuf = buf; |
| 551 | else | 551 | else |
| @@ -645,4 +645,15 @@ exit_0: | |||
| 645 | return ret; | 645 | return ret; |
| 646 | } | 646 | } |
| 647 | 647 | ||
| 648 | #define decompress unlzma | 648 | #ifdef PREBOOT |
| 649 | STATIC int INIT decompress(unsigned char *buf, int in_len, | ||
| 650 | int(*fill)(void*, unsigned int), | ||
| 651 | int(*flush)(void*, unsigned int), | ||
| 652 | unsigned char *output, | ||
| 653 | int *posp, | ||
| 654 | void(*error_fn)(char *x) | ||
| 655 | ) | ||
| 656 | { | ||
| 657 | return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn); | ||
| 658 | } | ||
| 659 | #endif | ||
diff --git a/lib/flex_array.c b/lib/flex_array.c index 0e7894ce8882..08f1636d296a 100644 --- a/lib/flex_array.c +++ b/lib/flex_array.c | |||
| @@ -254,7 +254,6 @@ void *flex_array_get(struct flex_array *fa, int element_nr) | |||
| 254 | { | 254 | { |
| 255 | int part_nr = fa_element_to_part_nr(fa, element_nr); | 255 | int part_nr = fa_element_to_part_nr(fa, element_nr); |
| 256 | struct flex_array_part *part; | 256 | struct flex_array_part *part; |
| 257 | int index; | ||
| 258 | 257 | ||
| 259 | if (element_nr >= fa->total_nr_elements) | 258 | if (element_nr >= fa->total_nr_elements) |
| 260 | return NULL; | 259 | return NULL; |
| @@ -264,6 +263,5 @@ void *flex_array_get(struct flex_array *fa, int element_nr) | |||
| 264 | part = (struct flex_array_part *)&fa->parts[0]; | 263 | part = (struct flex_array_part *)&fa->parts[0]; |
| 265 | else | 264 | else |
| 266 | part = fa->parts[part_nr]; | 265 | part = fa->parts[part_nr]; |
| 267 | index = index_inside_part(fa, element_nr); | ||
| 268 | return &part->elements[index_inside_part(fa, element_nr)]; | 266 | return &part->elements[index_inside_part(fa, element_nr)]; |
| 269 | } | 267 | } |
