51static void *php_bz2_alloc(
void *opaque,
int items,
int size)
56static void php_bz2_free(
void *opaque,
void *address)
69 size_t *bytes_consumed,
86 streamp = &(
data->strm);
88 while (buckets_in->
head) {
89 size_t bin = 0, desired;
92 while (bin < bucket->buflen) {
94 status = BZ2_bzDecompressInit(streamp, 0,
data->small_footprint);
105 consumed += bucket->
buflen;
109 desired = bucket->
buflen - bin;
110 if (desired >
data->inbuf_len) {
111 desired =
data->inbuf_len;
114 data->strm.avail_in = desired;
118 if (
status == BZ_STREAM_END) {
119 BZ2_bzDecompressEnd(&(
data->strm));
120 if (
data->expect_concatenated) {
125 }
else if (
status != BZ_OK) {
131 desired -=
data->strm.avail_in;
133 data->strm.avail_in = 0;
137 if (
data->strm.avail_out <
data->outbuf_len) {
139 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
142 data->strm.avail_out =
data->outbuf_len;
145 }
else if (
status == BZ_STREAM_END &&
data->strm.avail_out >=
data->outbuf_len) {
160 if (
data->strm.avail_out <
data->outbuf_len) {
161 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
165 data->strm.avail_out =
data->outbuf_len;
168 }
else if (
status == BZ_OK) {
174 if (bytes_consumed) {
175 *bytes_consumed = consumed;
186 BZ2_bzDecompressEnd(&(
data->strm));
195 php_bz2_decompress_filter,
196 php_bz2_decompress_dtor,
208 size_t *bytes_consumed,
225 while (buckets_in->
head) {
226 size_t bin = 0, desired;
230 while (bin < bucket->buflen) {
233 desired = bucket->
buflen - bin;
234 if (desired >
data->inbuf_len) {
235 desired =
data->inbuf_len;
238 data->strm.avail_in = desired;
241 data->is_flushed = flush_mode != BZ_RUN;
242 status = BZ2_bzCompress(&(
data->strm), flush_mode);
248 desired -=
data->strm.avail_in;
250 data->strm.avail_in = 0;
254 if (
data->strm.avail_out <
data->outbuf_len) {
256 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
260 data->strm.avail_out =
data->outbuf_len;
272 data->is_flushed = 1;
273 if (
data->strm.avail_out <
data->outbuf_len) {
274 size_t bucketlen =
data->outbuf_len -
data->strm.avail_out;
278 data->strm.avail_out =
data->outbuf_len;
285 if (bytes_consumed) {
286 *bytes_consumed = consumed;
295 BZ2_bzCompressEnd(&(
data->strm));
303 php_bz2_compress_filter,
304 php_bz2_compress_dtor,
324 data->strm.bzalloc = php_bz2_alloc;
325 data->strm.bzfree = php_bz2_free;
327 data->strm.avail_out =
data->outbuf_len =
data->inbuf_len = 2048;
329 data->strm.avail_in = 0;
332 if (
strcasecmp(filtername,
"bzip2.decompress") == 0) {
333 data->small_footprint = 0;
334 data->expect_concatenated = 0;
347 tmpzval = filterparams;
356 fops = &php_bz2_decompress_ops;
357 }
else if (
strcasecmp(filtername,
"bzip2.compress") == 0) {
367 zend_long blocks = zval_get_long(tmpzval);
368 if (blocks < 1 || blocks > 9) {
371 blockSize100k = (int) blocks;
378 if (work < 0 || work > 250) {
381 workFactor = (int) work;
387 status = BZ2_bzCompressInit(&(
data->strm), blockSize100k, 0, workFactor);
388 data->is_flushed = 1;
389 fops = &php_bz2_compress_ops;
406 php_bz2_filter_create
const php_stream_filter_factory php_bz2_filter_factory
struct _php_bz2_filter_data php_bz2_filter_data
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_BZ2_FILTER_DEFAULT_BLOCKSIZE
#define PHP_BZ2_FILTER_DEFAULT_WORKFACTOR
#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
unsigned int expect_concatenated
unsigned int small_footprint
#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)
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)