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
+20 -7
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);