inflate: error handling cleanup

This passes the error function as a callback rather than using a
global symbol.

Signed-off-by: Matt Mackall <[EMAIL PROTECTED]>

Index: 2.6.14/arch/alpha/boot/misc.c
===================================================================
--- 2.6.14.orig/arch/alpha/boot/misc.c  2005-10-28 22:04:21.000000000 -0700
+++ 2.6.14/arch/alpha/boot/misc.c       2005-10-28 22:04:23.000000000 -0700
@@ -28,8 +28,6 @@ extern long srm_printk(const char *, ...
  * gzip delarations
  */
 
-static void error(char *m);
-
 static char *input_data;
 static int  input_data_size;
 
@@ -50,7 +48,7 @@ static void flush_window(const u8 *buf, 
                *output_data++ = *buf++;
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -76,7 +74,7 @@ decompress_kernel(void *output_start,
        /* FIXME FIXME FIXME */
 
 /*     puts("Uncompressing Linux..."); */
-       count = gunzip(input_data, input_data_size, NULL, flush_window);
+       count = gunzip(input_data, input_data_size, NULL, flush_window, error);
 /*     puts(" done, booting the kernel.\n"); */
        return count;
 }
Index: 2.6.14/arch/arm/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/arm/boot/compressed/misc.c 2005-10-28 22:04:21.000000000 
-0700
+++ 2.6.14/arch/arm/boot/compressed/misc.c      2005-10-28 22:04:23.000000000 
-0700
@@ -46,8 +46,6 @@ icedcc_putstr(const char *ptr)
  * gzip declarations
  */
 
-static void error(char *m);
-
 extern char input_data[];
 extern char input_data_end[];
 
@@ -75,7 +73,7 @@ static void flush_window(const u8 *buf, 
        putstr(".");
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        putstr("\n\n");
        putstr(x);
@@ -98,7 +96,8 @@ decompress_kernel(u32 output_start, u32 
        arch_decomp_setup();
 
        putstr("Uncompressing Linux...");
-       gunzip(input_data, input_data_end - input_data, NULL, flush_window);
+       gunzip(input_data, input_data_end - input_data, NULL, flush_window,
+              error);
        putstr(" done, booting the kernel.\n");
        return output_ptr;
 }
@@ -111,7 +110,8 @@ int main()
        output_data = output_buffer;
 
        putstr("Uncompressing Linux...");
-       gunzip(input_data, input_data_end - input_data, NULL, flush_window);
+       gunzip(input_data, input_data_end - input_data, NULL, flush_window,
+              error);
        putstr("done.\n");
        return 0;
 }
Index: 2.6.14/arch/arm26/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/arm26/boot/compressed/misc.c       2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/arm26/boot/compressed/misc.c    2005-10-28 22:04:23.000000000 
-0700
@@ -31,8 +31,6 @@ unsigned int __machine_arch_type;
  * gzip delarations
  */
 
-static void error(char *m);
-
 extern char input_data[];
 extern char input_data_end[];
 static u8 *output_data;
@@ -59,7 +57,7 @@ static void flush_window(const u8 *buf, 
        puts(".");
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        int ptr;
 
@@ -84,7 +82,8 @@ decompress_kernel(u32 output_start, u32 
        arch_decomp_setup();
 
        puts("Uncompressing Linux...");
-       gunzip(input_data, input_data_end - input_data, NULL, flush_window);
+       gunzip(input_data, input_data_end - input_data, NULL, flush_window,
+              error);
        puts(" done, booting the kernel.\n");
        return output_ptr;
 }
@@ -97,7 +96,8 @@ int main()
        output_data = output_buffer;
 
        puts("Uncompressing Linux...");
-       gunzip(input_data, input_data_end - input_data, NULL, flush_window);
+       gunzip(input_data, input_data_end - input_data, NULL, flush_window,
+              error);
        puts("done.\n");
        return 0;
 }
Index: 2.6.14/arch/cris/arch-v10/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/cris/arch-v10/boot/compressed/misc.c       2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/cris/arch-v10/boot/compressed/misc.c    2005-10-28 
22:04:23.000000000 -0700
@@ -30,8 +30,6 @@
 
 unsigned compsize; /* compressed size, used by head.S */
 
-static void error(char *m);
-
 extern char *input_data;  /* lives in head.S */
 static u8 *output_data;
 
@@ -79,8 +77,7 @@ static void flush_window(const u8 *buf, 
                *output_data++ = *buf++;
 }
 
-static void
-error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -136,6 +133,6 @@ decompress_kernel()
        }
 
        puts("Uncompressing Linux...\n");
-       compsize = gunzip(input_data, 0x7fffffff, NULL, flush_window);
+       compsize = gunzip(input_data, 0x7fffffff, NULL, flush_window, error);
        puts("Done. Now booting the kernel.\n");
 }
Index: 2.6.14/arch/cris/arch-v32/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/cris/arch-v32/boot/compressed/misc.c       2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/cris/arch-v32/boot/compressed/misc.c    2005-10-28 
22:04:23.000000000 -0700
@@ -30,8 +30,6 @@
  * gzip declarations
  */
 
-static void error(char *m);
-
 extern char *input_data;  /* lives in head.S */
 static u8 *output_data;
 
@@ -91,8 +89,7 @@ static void flush_window(const u8 *buf, 
                *output_data++ = *buf++;
 }
 
-static void
-error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -179,6 +176,6 @@ decompress_kernel()
        }
 
        puts("Uncompressing Linux...\n");
-       gunzip(input_data, 0x7fffffff, NULL, flush_window);
+       gunzip(input_data, 0x7fffffff, NULL, flush_window, error);
        puts("Done. Now booting the kernel.\n");
 }
Index: 2.6.14/arch/i386/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/i386/boot/compressed/misc.c        2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/i386/boot/compressed/misc.c     2005-10-28 22:04:23.000000000 
-0700
@@ -24,8 +24,6 @@
  * Incomprehensible are the ways of bootloaders.
  */
 
-static void error(char *m);
-
 /*
  * This is set up by the setup-routine at boot-time
  */
@@ -125,7 +123,7 @@ static void flush_window(const u8 *buf, 
        }
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        putstr("\n\n");
        putstr(x);
@@ -214,7 +212,7 @@ asmlinkage int decompress_kernel(struct 
        else setup_output_buffer_if_we_run_high(mv);
 
        putstr("Uncompressing Linux... ");
-       gunzip(input_data, input_len, NULL, flush_window);
+       gunzip(input_data, input_len, NULL, flush_window, error);
        putstr("Ok, booting the kernel.\n");
        if (high_loaded) close_output_buffer_if_we_run_high(mv);
        return high_loaded;
Index: 2.6.14/arch/m32r/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/m32r/boot/compressed/misc.c        2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/m32r/boot/compressed/misc.c     2005-10-28 22:04:23.000000000 
-0700
@@ -17,8 +17,6 @@
  * gzip declarations
  */
 
-static void error(char *m);
-
 static unsigned char *input_data;
 static int input_len;
 static u8 *output_data;
@@ -39,7 +37,7 @@ static void flush_window(const u8 *buf, 
                *output_data++ = *buf++;
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -61,6 +59,6 @@ decompress_kernel(int mmu_on, unsigned c
        input_len = zimage_len;
 
        puts("Uncompressing Linux... ");
-       gunzip(input_data, input_len, NULL, flush_window);
+       gunzip(input_data, input_len, NULL, flush_window, error);
        puts("Ok, booting the kernel.\n");
 }
Index: 2.6.14/arch/sh/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/sh/boot/compressed/misc.c  2005-10-28 22:04:21.000000000 
-0700
+++ 2.6.14/arch/sh/boot/compressed/misc.c       2005-10-28 22:04:23.000000000 
-0700
@@ -19,8 +19,6 @@
  * gzip declarations
  */
 
-static void error(char *m);
-
 extern char input_data[];
 extern int input_len;
 static u8 *output_data;
@@ -67,7 +65,7 @@ static void flush_window(const u8 *buf, 
                *output_data++ = *buf++;
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -88,6 +86,6 @@ void decompress_kernel(void)
        free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
 
        puts("Uncompressing Linux... ");
-       gunzip(input_data, input_len, NULL, flush_window);
+       gunzip(input_data, input_len, NULL, flush_window, error);
        puts("Ok, booting the kernel.\n");
 }
Index: 2.6.14/arch/sh64/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/sh64/boot/compressed/misc.c        2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/sh64/boot/compressed/misc.c     2005-10-28 22:04:23.000000000 
-0700
@@ -19,8 +19,6 @@ int cache_control(unsigned int command);
  * gzip declarations
  */
 
-static void error(char *m);
-
 extern char input_data[];
 extern int input_len;
 static u8 *output_data;
@@ -49,7 +47,7 @@ static void flush_window(const u8 *buf, 
        puts(".");
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        puts("\n\n");
        puts(x);
@@ -70,7 +68,7 @@ void decompress_kernel(void)
 
        puts("Uncompressing Linux... ");
        cache_control(CACHE_ENABLE);
-       gunzip(input_data, input_len, NULL, flush_window);
+       gunzip(input_data, input_len, NULL, flush_window, error);
        puts("\n");
 
 #if 0
Index: 2.6.14/arch/x86_64/boot/compressed/misc.c
===================================================================
--- 2.6.14.orig/arch/x86_64/boot/compressed/misc.c      2005-10-28 
22:04:21.000000000 -0700
+++ 2.6.14/arch/x86_64/boot/compressed/misc.c   2005-10-28 22:04:23.000000000 
-0700
@@ -16,8 +16,6 @@
  * gzip declarations
  */
 
-static void error(char *m);
-
 /*
  * This is set up by the setup-routine at boot-time
  */
@@ -114,7 +112,7 @@ static void flush_window(const u8 *buf, 
        }
 }
 
-static void error(char *x)
+static void error(const char *x)
 {
        putstr("\n\n");
        putstr(x);
@@ -192,7 +190,7 @@ int decompress_kernel(struct moveparams 
        else setup_output_buffer_if_we_run_high(mv);
 
        putstr(".\nDecompressing Linux...");
-       gunzip(input_data, input_len, NULL, flush_window);
+       gunzip(input_data, input_len, NULL, flush_window, error);
        putstr("done.\nBooting the kernel.\n");
        if (high_loaded) close_output_buffer_if_we_run_high(mv);
        return high_loaded;
Index: 2.6.14/init/do_mounts_rd.c
===================================================================
--- 2.6.14.orig/init/do_mounts_rd.c     2005-10-28 22:04:21.000000000 -0700
+++ 2.6.14/init/do_mounts_rd.c  2005-10-28 22:04:23.000000000 -0700
@@ -281,12 +281,17 @@ static int crd_infd, crd_outfd;
 
 #define INIT __init
 
-static void __init error(char *m);
-
 #define NO_INFLATE_MALLOC
 
 #include "../lib/inflate.c"
 
+static void __init error(const char *x)
+{
+       printk(KERN_ERR "%s\n", x);
+       exit_code = 1;
+       unzip_error = 1;
+}
+
 /*
  * Fill the input buffer. This is called only when the buffer is empty
  * and at least one byte is really needed.
@@ -310,13 +315,6 @@ static void __init flush_buffer(const u8
        }
 }
 
-static void __init error(char *x)
-{
-       printk(KERN_ERR "%s\n", x);
-       exit_code = 1;
-       unzip_error = 1;
-}
-
 static int __init crd_load(int in_fd, int out_fd)
 {
        int result;
@@ -330,7 +328,7 @@ static int __init crd_load(int in_fd, in
                printk(KERN_ERR "RAMDISK: Couldn't allocate gzip buffer\n");
                return -1;
        }
-       result = gunzip(inbuf, INBUFSIZ, fill_inbuf, flush_buffer);
+       result = gunzip(inbuf, INBUFSIZ, fill_inbuf, flush_buffer, error);
        if (unzip_error)
                result = 1;
        kfree(inbuf);
Index: 2.6.14/init/initramfs.c
===================================================================
--- 2.6.14.orig/init/initramfs.c        2005-10-28 22:04:21.000000000 -0700
+++ 2.6.14/init/initramfs.c     2005-10-28 22:04:23.000000000 -0700
@@ -7,8 +7,8 @@
 #include <linux/string.h>
 #include <linux/syscalls.h>
 
-static __initdata char *message;
-static void __init error(char *x)
+static __initdata const char *message;
+static void __init error(const char *x)
 {
        if (!message)
                message = x;
@@ -335,13 +335,12 @@ static void __init flush_buffer(const u8
 
 #define INIT __init
 
-static void __init error(char *m);
-
 #define NO_INFLATE_MALLOC
 
 #include "../lib/inflate.c"
 
-static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
+static const char * __init unpack_to_rootfs(char *buf, unsigned len,
+                                           int check_only)
 {
        int written, cnt;
        dry_run = check_only;
@@ -369,7 +368,7 @@ static char * __init unpack_to_rootfs(ch
                        continue;
                }
                this_header = 0;
-               cnt = gunzip(buf, len, NULL, flush_buffer);
+               cnt = gunzip(buf, len, NULL, flush_buffer, error);
                if (state != Reset)
                        error("junk in gzipped archive");
                this_header = saved_offset + cnt;
@@ -397,8 +396,9 @@ static void __init free_initrd(void)
 
 void __init populate_rootfs(void)
 {
-       char *err = unpack_to_rootfs(__initramfs_start,
-                        __initramfs_end - __initramfs_start, 0);
+       const char *err =
+               unpack_to_rootfs(__initramfs_start,
+                                __initramfs_end - __initramfs_start, 0);
        if (err)
                panic(err);
 #ifdef CONFIG_BLK_DEV_INITRD
Index: 2.6.14/lib/inflate.c
===================================================================
--- 2.6.14.orig/lib/inflate.c   2005-10-28 22:04:19.000000000 -0700
+++ 2.6.14/lib/inflate.c        2005-10-28 22:04:23.000000000 -0700
@@ -121,8 +121,9 @@ static void *malloc(int size)
 {
        void *p;
 
-       if (size <0)
-               error("Malloc error");
+       if (size < 0)
+               return NULL;
+
        if (!malloc_ptr)
                malloc_ptr = free_mem_ptr;
 
@@ -132,7 +133,7 @@ static void *malloc(int size)
        malloc_ptr += size;
 
        if (malloc_ptr >= free_mem_end_ptr)
-               error("Out of memory");
+               return NULL;
 
        malloc_count++;
        return p;
@@ -176,6 +177,7 @@ struct iostate {
        int ipos, isize, itotal, opos, osize, ototal, bits;
        void (*fill)(u8 *ibuf, int len);
        void (*flush)(const u8 *obuf, int len);
+       void (*error)(const char *msg);
        u32 buf, crc;
 };
 
@@ -879,7 +881,7 @@ static int noinline INIT inflate_dynamic
        if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl))) {
                DEBG("dyn5b ");
                if (i == 1) {
-                       error("incomplete literal tree");
+                       io->error("incomplete literal tree");
                        huft_free(tl);
                }
                return i;       /* incomplete code set */
@@ -889,7 +891,7 @@ static int noinline INIT inflate_dynamic
        if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd))) {
                DEBG("dyn5d ");
                if (i == 1) {
-                       error("incomplete distance tree");
+                       io->error("incomplete distance tree");
                        huft_free(td);
                }
                huft_free(tl);
@@ -992,9 +994,11 @@ static void INIT makecrc(void)
  * @isize: size of pool
  * @fill: function to fill the input pool
  * @flush: function to flush the output pool
+ * @error: function to report an error
  */
 static int INIT gunzip(u8 *ibuf, int isize, void (*fill)(u8 *buf, int size),
-                      void (*flush)(const u8 *buf, int size))
+                      void (*flush)(const u8 *buf, int size),
+                      void (*error)(const char *msg))
 {
        u8 flags;
        unsigned char magic[2]; /* magic header */

Reply via email to