Author: mturk Date: Mon Aug 17 07:09:26 2009 New Revision: 804880 URL: http://svn.apache.org/viewvc?rev=804880&view=rev Log: Add deflate_global from OpenBSD sys/crypto
Added: commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c (with props) commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h (with props) Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=804880&r1=804879&r2=804880&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Mon Aug 17 07:09:26 2009 @@ -207,6 +207,7 @@ $(SRCDIR)/srclib/zlib/inftrees.$(OBJ) \ $(SRCDIR)/srclib/zlib/trees.$(OBJ) \ $(SRCDIR)/srclib/zlib/uncompr.$(OBJ) \ + $(SRCDIR)/srclib/zlib/zdeflate.$(OBJ) \ $(SRCDIR)/srclib/zlib/zutil.$(OBJ) OPENSSL_OBJS=\ Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=804880&r1=804879&r2=804880&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Mon Aug 17 07:09:26 2009 @@ -129,6 +129,7 @@ $(SRCDIR)/srclib/zlib/inftrees.$(OBJ) \ $(SRCDIR)/srclib/zlib/trees.$(OBJ) \ $(SRCDIR)/srclib/zlib/uncompr.$(OBJ) \ + $(SRCDIR)/srclib/zlib/zdeflate.$(OBJ) \ $(SRCDIR)/srclib/zlib/zutil.$(OBJ) OPENSSL_OBJS=\ Added: commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c?rev=804880&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c Mon Aug 17 07:09:26 2009 @@ -0,0 +1,197 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2001 Jean-Jacques Bernard-Gundol (j...@wabbitt.org) + * + */ + +/* + * This file contains a wrapper around the deflate algo compression + * functions using the zlib library (see net/zlib.{c,h}) + */ + +#include "zlib/zlib.h" +#include "zlib/zutil.h" +#include "zlib/zdeflate.h" + +#define Z_METHOD 8 +#define Z_MEMLEVEL 8 +#define ZBUF 10 + +int window_inflate = -1 * MAX_WBITS; +int window_deflate = -12; + +struct deflate_buf { + Byte *out; + uInt size; + int flag; +}; + +/* + * This function takes a block of data and (de)compress it using the deflate + * algorithm + */ + +uInt +acr_z_deflate_global(Byte *data, uInt size, int comp, Byte **out) +{ + /* comp indicates whether we compress (0) or decompress (1) */ + + z_stream zbuf; + Byte *output; + uInt count, result; + int error, i = 0, j; + struct deflate_buf buf[ZBUF]; + + memset(&zbuf, 0, sizeof(z_stream)); + for (j = 0; j < ZBUF; j++) + buf[j].flag = 0; + + zbuf.next_in = data; /* data that is going to be processed */ + zbuf.zalloc = Z_NULL; + zbuf.zfree = Z_NULL; + zbuf.opaque = Z_NULL; + zbuf.avail_in = size; /* Total length of data to be processed */ + + if (comp == 0) { + buf[i].out = malloc((size_t)size); + if (buf[i].out == NULL) { + error = errno; + goto bad; + } + buf[i].size = size; + buf[i].flag = 1; + i++; + } + else { + /* + * Choose a buffer with 4x the size of the input buffer + * for the size of the output buffer in the case of + * decompression. If it's not sufficient, it will need to be + * updated while the decompression is going on + */ + buf[i].out = malloc((size_t)(size * 4)); + if (buf[i].out == NULL) { + error = errno; + goto bad; + } + buf[i].size = size * 4; + buf[i].flag = 1; + i++; + } + + zbuf.next_out = buf[0].out; + zbuf.avail_out = buf[0].size; + + error = comp ? inflateInit2(&zbuf, window_inflate) : + deflateInit2(&zbuf, Z_DEFAULT_COMPRESSION, Z_METHOD, + window_deflate, Z_MEMLEVEL, Z_DEFAULT_STRATEGY); + + if (error != Z_OK) + goto bad; + for (;;) { + error = comp ? inflate(&zbuf, Z_PARTIAL_FLUSH) : + deflate(&zbuf, Z_PARTIAL_FLUSH); + if (error != Z_OK && error != Z_STREAM_END) + goto bad; + else if (zbuf.avail_in == 0 && zbuf.avail_out != 0) + goto end; + else if (zbuf.avail_out == 0 && i < (ZBUF - 1)) { + /* we need more output space, allocate size */ + buf[i].out = malloc((size_t)size); + if (buf[i].out == NULL) { + error = errno; + goto bad; + } + zbuf.next_out = buf[i].out; + buf[i].size = size; + buf[i].flag = 1; + zbuf.avail_out = buf[i].size; + i++; + } + else { + error = ENOSPC; + goto bad; + } + } + +end: + result = count = zbuf.total_out; + + *out = malloc((size_t)result); + if (*out == NULL) { + error = errno; + goto bad; + } + if (comp) + inflateEnd(&zbuf); + else + deflateEnd(&zbuf); + output = *out; + for (j = 0; buf[j].flag != 0; j++) { + if (count > buf[j].size) { + memcpy(*out, buf[j].out, buf[j].size); + *out += buf[j].size; + free(buf[j].out); + count -= buf[j].size; + } + else { + /* it should be the last buffer */ + memcpy(*out, buf[j].out, count); + *out += count; + free(buf[j].out); + count = 0; + } + } + *out = output; + return result; + +bad: + *out = NULL; + for (j = 0; buf[j].flag != 0; j++) + free(buf[j].out); + if (comp) + inflateEnd(&zbuf); + else + deflateEnd(&zbuf); + if (error < 0) { + switch (error) { + case Z_STREAM_ERROR: + errno = EBADF; + break; + case Z_DATA_ERROR: + errno = EILSEQ; + break; + case Z_MEM_ERROR: + errno = ENOMEM; + break; + case Z_BUF_ERROR: + errno = ENOSPC; + break; + case Z_VERSION_ERROR: + errno = EINVAL; + break; + default: + errno = EFAULT; + break; + } + } + else + errno = error; + return 0; +} + Propchange: commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.c ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h?rev=804880&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h Mon Aug 17 07:09:26 2009 @@ -0,0 +1,44 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2001 Jean-Jacques Bernard-Gundol (j...@wabbitt.org) + * + */ + +/* + * Definition for the wrapper around the deflate compression + * algorithm + */ + +#ifndef _ZDEFLATE_H_ +#define _ZDEFLATE_H_ + +#include "zlib/zlib.h" + +/** + * This function takes a block of data and (de)compress it using the deflate + * algorithm. + * @param in Input data to compress/decompress + * @param size Inmput data length + * @param comp Indicates whether we compress (0) or decompress (1) + * @param out Output data buffer. Use free() when data is no longer needed. + * @return Output data length or 0 on failure. + */ +uInt acr_z_deflate_global(Byte *in, uInt size, int comp, Byte **out); + +#endif /* _ZDEFLATE_H_ */ + Propchange: commons/sandbox/runtime/trunk/src/main/native/srclib/zlib/zdeflate.h ------------------------------------------------------------------------------ svn:eol-style = native