// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (C) 2009 Thomas Chou <thomas@wytron.com.tw> * * This is a collection of several routines from gzip-1.0.3 * adapted for Linux. * * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 * * Adapted for SH by Stuart Menefy, Aug 1999 * * Modified to use standard LinuxSH BIOS by Greg Banks 7Jul2000 * * Based on arch/sh/boot/compressed/misc.c
*/
typedefunsignedchar uch; typedefunsignedshort ush; typedefunsignedlong ulg; #define WSIZE 0x8000 /* Window size must be at least 32k, */ /* and a power of two */
static uch *inbuf; /* input buffer */ static uch window[WSIZE]; /* Sliding window buffer */
staticunsigned insize; /* valid bytes in inbuf */ staticunsigned inptr; /* index of next byte to be processed in inbuf */ staticunsigned outcnt; /* bytes in output buffer */
/* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ASCII text */ #define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip
file */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ #define RESERVED 0xC0 /* bit 6,7: reserved */
for (i = 0; i < __n; i++)
d[i] = s[i]; return __dest;
}
/* * Fill the input buffer. This is called only when the buffer is empty * and at least one byte is really needed.
*/ staticint fill_inbuf(void)
{ if (insize != 0)
error("ran out of input data");
/* * Write the output window window[0..outcnt-1] and update crc and bytes_out. * (Used for the decompressed data only.)
*/ staticvoid flush_window(void)
{
ulg c = crc; /* temporary variable */ unsigned n;
uch *in, *out, ch;
in = window;
out = &output_data[output_ptr]; for (n = 0; n < outcnt; n++) {
ch = *out++ = *in++;
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
}
crc = c;
bytes_out += (ulg)outcnt;
output_ptr += (ulg)outcnt;
outcnt = 0;
}
staticvoid error(char *x)
{
puts("\nERROR\n");
puts(x);
puts("\n\n -- System halted");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.