Fix zmod.h usage in userspace

Do not use zmod.h in userspace.

This has also been filed with the ZFS team. It makes the userspace
libzpool code use the zlib API, instead of the Solaris-only and
non-standard zmod.h.  The zlib API is almost identical and is a de
facto standard, so this is a no-brainer.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
Brian Behlendorf 2010-08-26 10:29:11 -07:00
parent 3f50448292
commit eaa8687be3
2 changed files with 20 additions and 33 deletions

View File

@ -33,7 +33,6 @@
#include <sys/stat.h>
#include <sys/processor.h>
#include <sys/zfs_context.h>
#include <sys/zmod.h>
#include <sys/utsname.h>
#include <sys/systeminfo.h>
@ -844,31 +843,6 @@ kernel_fini(void)
urandom_fd = -1;
}
int
z_uncompress(void *dst, size_t *dstlen, const void *src, size_t srclen)
{
int ret;
uLongf len = *dstlen;
if ((ret = uncompress(dst, &len, src, srclen)) == Z_OK)
*dstlen = (size_t)len;
return (ret);
}
int
z_compress_level(void *dst, size_t *dstlen, const void *src, size_t srclen,
int level)
{
int ret;
uLongf len = *dstlen;
if ((ret = compress2(dst, &len, src, srclen, level)) == Z_OK)
*dstlen = (size_t)len;
return (ret);
}
uid_t
crgetuid(cred_t *cr)
{

View File

@ -28,22 +28,35 @@
#include <sys/debug.h>
#include <sys/types.h>
#include <sys/zmod.h>
#ifdef _KERNEL
#include <sys/systm.h>
#else
#include <sys/zmod.h>
typedef size_t zlen_t;
#define compress_func z_compress_level
#define uncompress_func z_uncompress
#else /* _KERNEL */
#include <strings.h>
#include <zlib.h>
typedef uLongf zlen_t;
#define compress_func compress2
#define uncompress_func uncompress
#endif
size_t
gzip_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n)
{
size_t dstlen = d_len;
zlen_t dstlen = d_len;
ASSERT(d_len <= s_len);
if (z_compress_level(d_start, &dstlen, s_start, s_len, n) != Z_OK) {
if (compress_func(d_start, &dstlen, s_start, s_len, n) != Z_OK) {
if (d_len != s_len)
return (s_len);
@ -51,18 +64,18 @@ gzip_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n)
return (s_len);
}
return (dstlen);
return ((size_t) dstlen);
}
/*ARGSUSED*/
int
gzip_decompress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n)
{
size_t dstlen = d_len;
zlen_t dstlen = d_len;
ASSERT(d_len >= s_len);
if (z_uncompress(d_start, &dstlen, s_start, s_len) != Z_OK)
if (uncompress_func(d_start, &dstlen, s_start, s_len) != Z_OK)
return (-1);
return (0);