33 return &stream_filters_hash;
39 return (
FG(stream_filters) ?
FG(stream_filters) : &stream_filters_hash);
60 if (!
FG(stream_filters)) {
79 if (is_persistent && !buf_persistent) {
134 (*left)->buflen = length;
136 (*left)->refcount = 1;
137 (*left)->own_buf = 1;
140 (*right)->buflen = in->
buflen - length;
142 memcpy((*right)->buf, in->
buf + length, (*right)->buflen);
143 (*right)->refcount = 1;
144 (*right)->own_buf = 1;
168 brigade->
tail = bucket;
170 brigade->
head = bucket;
176 if (brigade->
tail == bucket) {
186 brigade->
head = bucket;
188 brigade->
tail = bucket;
222 HashTable *filter_hash = (
FG(stream_filters) ?
FG(stream_filters) : &stream_filters_hash);
230 if (
NULL != (
factory = zend_hash_str_find_ptr(filter_hash, filtername,
n))) {
232 }
else if ((period =
strrchr(filtername,
'.'))) {
237 memcpy(wildname, filtername,
n+1);
238 period = wildname + (period - filtername);
239 while (period && !filter) {
243 if (
NULL != (
factory = zend_hash_str_find_ptr(filter_hash, wildname,
strlen(wildname)))) {
248 period =
strrchr(wildname,
'.');
253 if (filter ==
NULL) {
293 chain->
tail = filter;
295 chain->
head = filter;
296 filter->
chain = chain;
315 chain->
head = filter;
317 chain->
tail = filter;
318 filter->
chain = chain;
339 while (brig_in.
head) {
340 bucket = brig_in.
head;
344 while (brig_out.head) {
345 bucket = brig_out.head;
364 while (brig_outp->head) {
365 bucket = brig_outp->head;
388 if (chain->
head == filter) {
405 size_t flushed_size = 0;
413 chain = filter->
chain;
441 for(bucket = inp->head; bucket; bucket = bucket->
next) {
442 flushed_size += bucket->
buflen;
445 if (flushed_size == 0) {
462 while ((bucket = inp->head)) {
470 while ((bucket = inp->head)) {
strrchr(string $haystack, string $needle, bool $before_needle=false)
count(Countable|array $value, int $mode=COUNT_NORMAL)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
const php_stream_filter_factory * factory
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 void _php_stream_filter_append(php_stream_filter_chain *chain, php_stream_filter *filter)
PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket)
PHPAPI int php_stream_filter_register_factory(const char *filterpattern, const php_stream_filter_factory *factory)
PHPAPI void _php_stream_filter_prepend(php_stream_filter_chain *chain, php_stream_filter *filter)
PHPAPI HashTable * php_get_stream_filters_hash_global(void)
PHPAPI int php_stream_filter_register_factory_volatile(zend_string *filterpattern, const php_stream_filter_factory *factory)
PHPAPI php_stream_filter * php_stream_filter_create(const char *filtername, zval *filterparams, uint8_t persistent)
PHPAPI HashTable * _php_get_stream_filters_hash(void)
PHPAPI int php_stream_bucket_split(php_stream_bucket *in, php_stream_bucket **left, php_stream_bucket **right, size_t length)
PHPAPI void php_stream_filter_free(php_stream_filter *filter)
PHPAPI php_stream_filter * _php_stream_filter_alloc(const php_stream_filter_ops *fops, void *abstract, uint8_t persistent STREAMS_DC)
PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern)
PHPAPI int php_stream_filter_prepend_ex(php_stream_filter_chain *chain, php_stream_filter *filter)
PHPAPI int _php_stream_filter_flush(php_stream_filter *filter, int finish)
PHPAPI int php_stream_filter_append_ex(php_stream_filter_chain *chain, php_stream_filter *filter)
PHPAPI php_stream_filter * php_stream_filter_remove(php_stream_filter *filter, int call_dtor)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define PSFS_FLAG_FLUSH_CLOSE
#define PSFS_FLAG_FLUSH_INC
struct _php_stream_filter_chain php_stream_filter_chain
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
#define php_stream_is_persistent(stream)
#define pemalloc_rel_orig(size, persistent)
php_stream_bucket_brigade * brigade
php_stream_filter_status_t(* filter)(php_stream *stream, php_stream_filter *thisfilter, php_stream_bucket_brigade *buckets_in, php_stream_bucket_brigade *buckets_out, size_t *bytes_consumed, int flags)
void(* dtor)(php_stream_filter *thisfilter)
const php_stream_filter_ops * fops
php_stream_filter_chain * chain
ssize_t(* write)(php_stream *stream, const char *buf, size_t count)
const php_stream_ops * ops
php_stream_filter_chain writefilters
php_stream_filter_chain readfilters
#define perealloc(ptr, size, persistent)
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
#define safe_emalloc(nmemb, size, offset)
#define pecalloc(nmemb, size, persistent)
#define ALLOC_HASHTABLE(ht)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, size_t len)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
ZEND_API zend_result ZEND_FASTCALL zend_list_delete(zend_resource *res)
struct _zend_string zend_string
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
struct _zend_array HashTable