usr/src/uts/common/fs/zfs/gzip.c
author ahl
Thu, 22 Mar 2007 17:30:12 -0700
changeset 3886 3291401d66a6
permissions -rw-r--r--
6536602 add zlib compression support and upgrade to version 1.2.3 6536606 gzip compression for ZFS 6536608 restore zmod mapfile 6536631 decompress.c should use the new gzip support in zlib
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3886
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     1
/*
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     2
 * CDDL HEADER START
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     3
 *
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     7
 *
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    11
 * and limitations under the License.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    12
 *
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    18
 *
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    19
 * CDDL HEADER END
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    20
 */
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    21
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    22
/*
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    23
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    24
 * Use is subject to license terms.
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    25
 */
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    26
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    27
#pragma ident	"%Z%%M%	%I%	%E% SMI"
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    28
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    29
#include <sys/debug.h>
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    30
#include <sys/types.h>
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    31
#include <sys/zmod.h>
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    32
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    33
#ifdef _KERNEL
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    34
#include <sys/systm.h>
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    35
#else
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    36
#include <strings.h>
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    37
#endif
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    38
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    39
size_t
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    40
gzip_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n)
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    41
{
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    42
	size_t dstlen = d_len;
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    43
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    44
	ASSERT(d_len <= s_len);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    45
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    46
	if (z_compress_level(d_start, &dstlen, s_start, s_len, n) != Z_OK) {
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    47
		if (d_len != s_len)
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    48
			return (s_len);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    49
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    50
		bcopy(s_start, d_start, s_len);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    51
		return (s_len);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    52
	}
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    53
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    54
	return (dstlen);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    55
}
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    56
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    57
/*ARGSUSED*/
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    58
int
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    59
gzip_decompress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n)
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    60
{
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    61
	size_t dstlen = d_len;
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    62
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    63
	ASSERT(d_len >= s_len);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    64
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    65
	if (z_uncompress(d_start, &dstlen, s_start, s_len) != Z_OK)
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    66
		return (-1);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    67
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    68
	return (0);
3291401d66a6 6536602 add zlib compression support and upgrade to version 1.2.3
ahl
parents:
diff changeset
    69
}