mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Add required zlib_deflate parts based on kernel zlib code in preparation to DASD dumper DFLTCC deflate exploitation. Omit inflate modules in order to minimize the dumper size (no decompression is required for the dumping). Adjust include statements leaving other code as is. Signed-off-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
106 lines
2.7 KiB
C
106 lines
2.7 KiB
C
/* zutil.h -- internal interface and configuration of the compression library
|
|
* Copyright (C) 1995-1998 Jean-loup Gailly.
|
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
|
*/
|
|
|
|
/* WARNING: this file should *not* be used by applications. It is
|
|
part of the implementation of the compression library and is
|
|
subject to change. Applications should only use zlib.h.
|
|
*/
|
|
|
|
/* @(#) $Id: zutil.h,v 1.1 2000/01/01 03:32:23 davem Exp $ */
|
|
|
|
#ifndef _Z_UTIL_H
|
|
#define _Z_UTIL_H
|
|
|
|
#include "zlib.h"
|
|
#include <stddef.h>
|
|
|
|
typedef unsigned char uch;
|
|
typedef unsigned short ush;
|
|
typedef unsigned long ulg;
|
|
|
|
/* common constants */
|
|
|
|
#define STORED_BLOCK 0
|
|
#define STATIC_TREES 1
|
|
#define DYN_TREES 2
|
|
/* The three kinds of block type */
|
|
|
|
#define MIN_MATCH 3
|
|
#define MAX_MATCH 258
|
|
/* The minimum and maximum match lengths */
|
|
|
|
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
|
|
|
|
/* target dependencies */
|
|
|
|
/* Common defaults */
|
|
|
|
#ifndef OS_CODE
|
|
# define OS_CODE 0x03 /* assume Unix */
|
|
#endif
|
|
|
|
/* functions */
|
|
|
|
typedef uLong (*check_func) (uLong check, const Byte *buf,
|
|
uInt len);
|
|
|
|
|
|
/* checksum functions */
|
|
|
|
#define BASE 65521L /* largest prime smaller than 65536 */
|
|
#define NMAX 5552
|
|
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
|
|
|
|
#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
|
|
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
|
|
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
|
|
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
|
|
#define DO16(buf) DO8(buf,0); DO8(buf,8);
|
|
|
|
/* ========================================================================= */
|
|
/*
|
|
Update a running Adler-32 checksum with the bytes buf[0..len-1] and
|
|
return the updated checksum. If buf is NULL, this function returns
|
|
the required initial value for the checksum.
|
|
An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
|
|
much faster. Usage example:
|
|
|
|
uLong adler = zlib_adler32(0L, NULL, 0);
|
|
|
|
while (read_buffer(buffer, length) != EOF) {
|
|
adler = zlib_adler32(adler, buffer, length);
|
|
}
|
|
if (adler != original_adler) error();
|
|
*/
|
|
static inline uLong zlib_adler32(uLong adler,
|
|
const Byte *buf,
|
|
uInt len)
|
|
{
|
|
unsigned long s1 = adler & 0xffff;
|
|
unsigned long s2 = (adler >> 16) & 0xffff;
|
|
int k;
|
|
|
|
if (buf == NULL) return 1L;
|
|
|
|
while (len > 0) {
|
|
k = len < NMAX ? len : NMAX;
|
|
len -= k;
|
|
while (k >= 16) {
|
|
DO16(buf);
|
|
buf += 16;
|
|
k -= 16;
|
|
}
|
|
if (k != 0) do {
|
|
s1 += *buf++;
|
|
s2 += s1;
|
|
} while (--k);
|
|
s1 %= BASE;
|
|
s2 %= BASE;
|
|
}
|
|
return (s2 << 16) | s1;
|
|
}
|
|
|
|
#endif /* _Z_UTIL_H */
|