File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / zlib / uncompr.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 10:46:14 2013 UTC (10 years, 11 months ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_8p0, v1_8_8, v1_8_7p0, v1_8_7, v1_8_5p1, v1_8_3p2, v1_8_10p3_0, v1_8_10p3, HEAD
1.8.7

    1: /* uncompr.c -- decompress a memory buffer
    2:  * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
    3:  * For conditions of distribution and use, see copyright notice in zlib.h
    4:  */
    5: 
    6: /* @(#) $Id: uncompr.c,v 1.1.1.1 2013/07/22 10:46:14 misho Exp $ */
    7: 
    8: #define ZLIB_INTERNAL
    9: #include "zlib.h"
   10: 
   11: /* ===========================================================================
   12:      Decompresses the source buffer into the destination buffer.  sourceLen is
   13:    the byte length of the source buffer. Upon entry, destLen is the total
   14:    size of the destination buffer, which must be large enough to hold the
   15:    entire uncompressed data. (The size of the uncompressed data must have
   16:    been saved previously by the compressor and transmitted to the decompressor
   17:    by some mechanism outside the scope of this compression library.)
   18:    Upon exit, destLen is the actual size of the compressed buffer.
   19: 
   20:      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
   21:    enough memory, Z_BUF_ERROR if there was not enough room in the output
   22:    buffer, or Z_DATA_ERROR if the input data was corrupted.
   23: */
   24: int ZEXPORT uncompress (dest, destLen, source, sourceLen)
   25:     Bytef *dest;
   26:     uLongf *destLen;
   27:     const Bytef *source;
   28:     uLong sourceLen;
   29: {
   30:     z_stream stream;
   31:     int err;
   32: 
   33:     stream.next_in = (Bytef*)source;
   34:     stream.avail_in = (uInt)sourceLen;
   35:     /* Check for source > 64K on 16-bit machine: */
   36:     if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
   37: 
   38:     stream.next_out = dest;
   39:     stream.avail_out = (uInt)*destLen;
   40:     if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
   41: 
   42:     stream.zalloc = (alloc_func)0;
   43:     stream.zfree = (free_func)0;
   44: 
   45:     err = inflateInit(&stream);
   46:     if (err != Z_OK) return err;
   47: 
   48:     err = inflate(&stream, Z_FINISH);
   49:     if (err != Z_STREAM_END) {
   50:         inflateEnd(&stream);
   51:         if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
   52:             return Z_DATA_ERROR;
   53:         return err;
   54:     }
   55:     *destLen = stream.total_out;
   56: 
   57:     err = inflateEnd(&stream);
   58:     return err;
   59: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>