summaryrefslogtreecommitdiff
path: root/sys/pc98/boot/kzipboot/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/pc98/boot/kzipboot/misc.c')
-rw-r--r--sys/pc98/boot/kzipboot/misc.c207
1 files changed, 0 insertions, 207 deletions
diff --git a/sys/pc98/boot/kzipboot/misc.c b/sys/pc98/boot/kzipboot/misc.c
deleted file mode 100644
index a971aeec8b83..000000000000
--- a/sys/pc98/boot/kzipboot/misc.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * misc.c
- *
- * This is a collection of several routines from gzip-1.0.3
- * adapted for Linux.
- *
- * Ported to 386bsd by Serge Vakulenko
- */
-
-#include "gzip.h"
-
-unsigned outcnt;
-unsigned insize;
-unsigned inptr;
-
-extern const char input_data[];
-extern const int input_len;
-
-int input_ptr;
-
-int method;
-
-char *output_data;
-ulong output_ptr;
-
-void makecrc (void);
-void putstr (char *c);
-void *memcpy (void *to, const void *from, unsigned len);
-int memcmp (const void *arg1, const void *arg2, unsigned len);
-
-ulong crc; /* shift register contents */
-ulong crc_32_tab[256]; /* crc table, defined below */
-
-/*
- * Run a set of bytes through the crc shift register. If s is a NULL
- * pointer, then initialize the crc shift register contents instead.
- * Return the current crc in either case.
- */
-void updcrc(s, n)
-uchar *s; /* pointer to bytes to pump through */
-unsigned n; /* number of bytes in s[] */
-{
- while (n--)
- crc = crc_32_tab[(uchar)crc ^ (*s++)] ^ (crc >> 8);
-}
-
-/*
- * Clear input and output buffers
- */
-void clear_bufs()
-{
- outcnt = 0;
- insize = inptr = 0;
-}
-
-/*
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-void fill_inbuf ()
-{
- int len, i;
-
- /* Read as much as possible */
- insize = 0;
- do {
- len = INBUFSIZ - insize;
- if (len > input_len - input_ptr + 1)
- len = input_len-input_ptr+1;
- if (len <= 0)
- break;
- for (i=0; i<len; i++)
- inbuf[insize+i] = input_data[input_ptr+i];
- insize += len;
- input_ptr += len;
- } while (insize < INBUFSIZ);
- if (insize == 0)
- error("unable to fill buffer");
- inptr = 0;
-}
-
-/*
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-void flush_window()
-{
- if (outcnt == 0) return;
- updcrc(window, outcnt);
-
- memcpy(&output_data[output_ptr], (char *)window, outcnt);
-
- output_ptr += outcnt;
- outcnt = 0;
-}
-
-/*
- * Code to compute the CRC-32 table. Borrowed from
- * gzip-1.0.3/makecrc.c.
- * Not copyrighted 1990 Mark Adler
- */
-void makecrc(void)
-{
- ulong c; /* crc shift register */
- ulong e; /* polynomial exclusive-or pattern */
- int i; /* counter for all possible eight bit values */
- int k; /* byte being shifted into crc apparatus */
-
- /* terms of polynomial defining this crc (except x^32): */
- static const uchar poly[] = { 0,1,2,4,5,7,8,10,11,12,16,22,23,26, };
-
- /* Make exclusive-or pattern from polynomial */
- e = 0;
- for (i = 0; i < sizeof(poly)/sizeof(*poly); i++)
- e |= 1L << (31 - poly[i]);
-
- crc_32_tab[0] = 0;
-
- for (i = 1; i < 256; i++) {
- c = 0;
- for (k = i | 256; k != 1; k >>= 1) {
- c = c & 1 ? (c >> 1) ^ e : c >> 1;
- if (k & 1)
- c ^= e;
- }
- crc_32_tab[i] = c;
- }
-}
-
-/*
- * Check the magic number of the input file and update ofname if an
- * original name was given and to_stdout is not set.
- * Set inptr to the offset of the next byte to be processed.
- */
-static void get_method()
-{
- uchar flags;
- char magic[2]; /* magic header */
-
- magic[0] = get_byte();
- magic[1] = get_byte();
-
- method = -1; /* unknown yet */
- extended = pkzip = 0;
- /* assume multiple members in gzip file except for record oriented I/O */
-
- if (memcmp(magic, GZIP_MAGIC, 2) == 0
- || memcmp(magic, OLD_GZIP_MAGIC, 2) == 0) {
- method = get_byte();
- flags = get_byte();
- if (flags & ENCRYPTED)
- error("Input is encrypted");
- if (flags & CONTINUATION)
- error("Multi part input");
- if (flags & RESERVED)
- error("Input has invalid flags");
-
- (void) get_byte(); /* Get timestamp */
- (void) get_byte();
- (void) get_byte();
- (void) get_byte();
-
- (void) get_byte(); /* Ignore extra flags for the moment */
- (void) get_byte(); /* Ignore OS type for the moment */
-
- if (flags & EXTRA_FIELD) {
- unsigned len = get_byte();
- len |= get_byte() << 8;
- while (len--)
- (void) get_byte();
- }
-
- /* Discard file comment if any */
- if (flags & COMMENT)
- while (get_byte())
- continue;
-
- } else if (memcmp(magic, PKZIP_MAGIC, 2) == 0 && inptr == 2
- && memcmp(inbuf, PKZIP_MAGIC, 4) == 0) {
- /*
- * To simplify the code, we support a zip file when alone only.
- * We are thus guaranteed that the entire local header fits in inbuf.
- */
- inptr = 0;
- check_zipfile();
-
- } else if (memcmp(magic, PACK_MAGIC, 2) == 0)
- error("packed input");
- else if (memcmp(magic, LZW_MAGIC, 2) == 0)
- error("compressed input");
- if (method == -1)
- error("Corrupted input");
-}
-
-void
-decompress_kernel (void *dest)
-{
- output_data = dest;
- output_ptr = 0;
-
- input_ptr = 0;
-
- clear_bufs ();
- makecrc ();
- get_method ();
- unzip ();
-}