37static voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt
size)
42static void php_zlib_free(voidpf opaque, voidpf address)
55 size_t *bytes_consumed,
72 while (buckets_in->
head) {
73 size_t bin = 0, desired;
77 while (bin < (
unsigned int) bucket->
buflen && !
data->finished) {
79 desired = bucket->
buflen - bin;
80 if (desired >
data->inbuf_len) {
81 desired =
data->inbuf_len;
84 data->strm.avail_in = desired;
87 if (
status == Z_STREAM_END) {
88 inflateEnd(&(
data->strm));
89 data->finished =
'\1';
97 data->strm.avail_in = 0;
100 desired -=
data->strm.avail_in;
102 data->strm.avail_in = 0;
105 if (
data->strm.avail_out <
data->outbuf_len) {
107 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
109 stream,
estrndup((
char *)
data->outbuf, bucketlen), bucketlen, 1, 0);
111 data->strm.avail_out =
data->outbuf_len;
117 consumed += bucket->
buflen;
126 if (
data->strm.avail_out <
data->outbuf_len) {
127 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
130 stream,
estrndup((
char *)
data->outbuf, bucketlen), bucketlen, 1, 0);
132 data->strm.avail_out =
data->outbuf_len;
139 if (bytes_consumed) {
140 *bytes_consumed = consumed;
150 if (!
data->finished) {
151 inflateEnd(&(
data->strm));
160 php_zlib_inflate_filter,
161 php_zlib_inflate_dtor,
173 size_t *bytes_consumed,
190 while (buckets_in->
head) {
191 size_t bin = 0, desired;
193 bucket = buckets_in->
head;
197 while (bin < (
unsigned int) bucket->
buflen) {
200 desired = bucket->
buflen - bin;
201 if (desired >
data->inbuf_len) {
202 desired =
data->inbuf_len;
205 data->strm.avail_in = desired;
208 data->finished = flush_mode != Z_NO_FLUSH;
215 desired -=
data->strm.avail_in;
217 data->strm.avail_in = 0;
220 if (
data->strm.avail_out <
data->outbuf_len) {
222 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
225 stream,
estrndup((
char *)
data->outbuf, bucketlen), bucketlen, 1, 0);
227 data->strm.avail_out =
data->outbuf_len;
232 consumed += bucket->
buflen;
242 if (
data->strm.avail_out <
data->outbuf_len) {
243 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
246 stream,
estrndup((
char *)
data->outbuf, bucketlen), bucketlen, 1, 0);
248 data->strm.avail_out =
data->outbuf_len;
255 if (bytes_consumed) {
256 *bytes_consumed = consumed;
266 deflateEnd(&(
data->strm));
274 php_zlib_deflate_filter,
275 php_zlib_deflate_dtor,
299 data->strm.zalloc = (alloc_func) php_zlib_alloc;
300 data->strm.zfree = (free_func) php_zlib_free;
301 data->strm.avail_out =
data->outbuf_len =
data->inbuf_len = 0x8000;
308 data->strm.avail_in = 0;
317 data->strm.data_type = Z_ASCII;
319 if (
strcasecmp(filtername,
"zlib.inflate") == 0) {
329 if (tmp < -MAX_WBITS || tmp >
MAX_WBITS + 32) {
338 data->finished =
'\0';
339 status = inflateInit2(&(
data->strm), windowBits);
340 fops = &php_zlib_inflate_ops;
341 }
else if (
strcasecmp(filtername,
"zlib.deflate") == 0) {
343 int level = Z_DEFAULT_COMPRESSION;
345 int memLevel = MAX_MEM_LEVEL;
360 tmp = zval_get_long(tmpzval);
361 if (tmp < 1 || tmp > MAX_MEM_LEVEL) {
370 tmp = zval_get_long(tmpzval);
371 if (tmp < -MAX_WBITS || tmp >
MAX_WBITS + 16) {
379 tmp = zval_get_long(tmpzval);
382 goto factory_setlevel;
388 tmp = zval_get_long(filterparams);
391 if (tmp < -1 || tmp > 9) {
401 status = deflateInit2(&(
data->strm), level, Z_DEFLATED, windowBits, memLevel, 0);
403 fops = &php_zlib_deflate_ops;
420 php_zlib_filter_create
PHPAPI php_stream_bucket * php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, uint8_t own_buf, uint8_t buf_persistent)
PHPAPI php_stream_bucket * php_stream_bucket_make_writeable(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define php_stream_filter_alloc(fops, thisptr, persistent)
#define PSFS_FLAG_FLUSH_CLOSE
#define PSFS_FLAG_FLUSH_INC
struct _php_stream_filter_ops php_stream_filter_ops
php_stream_filter_status_t
struct _php_stream_filter_factory php_stream_filter_factory
struct _php_stream_bucket php_stream_bucket
struct _php_stream_bucket_brigade php_stream_bucket_brigade
struct _php_stream php_stream
struct _php_stream_filter php_stream_filter
const php_stream_filter_factory php_zlib_filter_factory
#define estrndup(s, length)
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
#define safe_pemalloc(nmemb, size, offset, persistent)
#define pecalloc(nmemb, size, persistent)
#define strcasecmp(s1, s2)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *str, size_t len)
struct _php_zlib_filter_data php_zlib_filter_data