00001
00002
00003
00004
00005
00006
00007
00008 #define ZLIB_INTERNAL
00009 #include "zlib.h"
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 int ZEXPORT uncompress (dest, destLen, source, sourceLen)
00025 Bytef *dest;
00026 uLongf *destLen;
00027 const Bytef *source;
00028 uLong sourceLen;
00029 {
00030 z_stream stream;
00031 int err;
00032
00033 stream.next_in = (Bytef*)source;
00034 stream.avail_in = (uInt)sourceLen;
00035
00036 if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
00037
00038 stream.next_out = dest;
00039 stream.avail_out = (uInt)*destLen;
00040 if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
00041
00042 stream.zalloc = (alloc_func)0;
00043 stream.zfree = (free_func)0;
00044
00045 err = inflateInit(&stream);
00046 if (err != Z_OK) return err;
00047
00048 err = inflate(&stream, Z_FINISH);
00049 if (err != Z_STREAM_END) {
00050 inflateEnd(&stream);
00051 if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
00052 return Z_DATA_ERROR;
00053 return err;
00054 }
00055 *destLen = stream.total_out;
00056
00057 err = inflateEnd(&stream);
00058 return err;
00059 }