Geant4-11
Macros | Functions
uncompr.c File Reference
#include "zlib.h"

Go to the source code of this file.

Macros

#define ZLIB_INTERNAL
 

Functions

int ZEXPORT uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
 
int ZEXPORT uncompress2 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen)
 

Macro Definition Documentation

◆ ZLIB_INTERNAL

#define ZLIB_INTERNAL

Definition at line 7 of file uncompr.c.

Function Documentation

◆ uncompress()

int ZEXPORT uncompress ( Bytef *  dest,
uLongf *  destLen,
const Bytef *  source,
uLong  sourceLen 
)

Definition at line 85 of file uncompr.c.

90{
91 return uncompress2(dest, destLen, source, &sourceLen);
92}
int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen)
Definition: uncompr.c:26

References uncompress2().

Referenced by G4ParticleHPManager::GetDataStream(), G4SBBremTable::ReadCompressedFile(), G4eDPWAElasticDCS::ReadCompressedFile(), G4OpticalSurface::ReadCompressedFile(), and G4GSMottCorrection::ReadCompressedFile().

◆ uncompress2()

int ZEXPORT uncompress2 ( Bytef *  dest,
uLongf *  destLen,
const Bytef *  source,
uLong *  sourceLen 
)

Definition at line 26 of file uncompr.c.

31{
32 z_stream stream;
33 int err;
34 const uInt max = (uInt)-1;
35 uLong len, left;
36 Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */
37
38 len = *sourceLen;
39 if (*destLen) {
40 left = *destLen;
41 *destLen = 0;
42 }
43 else {
44 left = 1;
45 dest = buf;
46 }
47
48 stream.next_in = (z_const Bytef *)source;
49 stream.avail_in = 0;
50 stream.zalloc = (alloc_func)0;
51 stream.zfree = (free_func)0;
52 stream.opaque = (voidpf)0;
53
54 err = inflateInit(&stream);
55 if (err != Z_OK) return err;
56
57 stream.next_out = dest;
58 stream.avail_out = 0;
59
60 do {
61 if (stream.avail_out == 0) {
62 stream.avail_out = left > (uLong)max ? max : (uInt)left;
63 left -= stream.avail_out;
64 }
65 if (stream.avail_in == 0) {
66 stream.avail_in = len > (uLong)max ? max : (uInt)len;
67 len -= stream.avail_in;
68 }
69 err = inflate(&stream, Z_NO_FLUSH);
70 } while (err == Z_OK);
71
72 *sourceLen -= len + stream.avail_in;
73 if (dest != buf)
74 *destLen = stream.total_out;
75 else if (stream.total_out && err == Z_BUF_ERROR)
76 left = 1;
77
78 inflateEnd(&stream);
79 return err == Z_STREAM_END ? Z_OK :
80 err == Z_NEED_DICT ? Z_DATA_ERROR :
81 err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
82 err;
83}
int ZEXPORT inflate(z_streamp strm, int flush)
Definition: inflate.c:622
int ZEXPORT inflateEnd(z_streamp strm)
Definition: inflate.c:1277
T max(const T t1, const T t2)
brief Return the largest of the two arguments
uInt avail_in
Definition: zlib.h:88
alloc_func zalloc
Definition: zlib.h:98
uInt avail_out
Definition: zlib.h:92
z_const Bytef * next_in
Definition: zlib.h:87
free_func zfree
Definition: zlib.h:99
voidpf opaque
Definition: zlib.h:100
uLong total_out
Definition: zlib.h:93
Bytef * next_out
Definition: zlib.h:91
#define Z_NEED_DICT
Definition: zlib.h:179
#define Z_BUF_ERROR
Definition: zlib.h:184
#define Z_STREAM_END
Definition: zlib.h:178
#define Z_OK
Definition: zlib.h:177
#define Z_DATA_ERROR
Definition: zlib.h:182
#define Z_NO_FLUSH
Definition: zlib.h:168
#define inflateInit(strm)
Definition: zlib.h:1795

References z_stream_s::avail_in, z_stream_s::avail_out, inflate(), inflateEnd(), inflateInit, G4INCL::Math::max(), z_stream_s::next_in, z_stream_s::next_out, z_stream_s::opaque, z_stream_s::total_out, Z_BUF_ERROR, Z_DATA_ERROR, Z_NEED_DICT, Z_NO_FLUSH, Z_OK, Z_STREAM_END, z_stream_s::zalloc, and z_stream_s::zfree.

Referenced by uncompress().