[PATCH 14/20] inflate: (arch) use an error callback rather than a global

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux