45static ssize_t php_stream_memory_write(
php_stream *stream,
const char *
buf,
size_t count)
59 if (ms->
fpos > data_len) {
64 ms->
data = zend_string_separate(ms->
data, 0);
102static int php_stream_memory_close(
php_stream *stream,
int close_handle)
106 zend_string_release(ms->
data);
114static int php_stream_memory_flush(
php_stream *stream)
182static int php_stream_memory_cast(
php_stream *stream,
int castas,
void **
ret)
190 time_t timestamp = 0;
200 ssb->sb.st_mode |= S_IFREG;
201 ssb->sb.st_mtime = timestamp;
202 ssb->sb.st_atime = timestamp;
203 ssb->sb.st_ctime = timestamp;
204 ssb->sb.st_nlink = 1;
205 ssb->sb.st_rdev = -1;
207 ssb->sb.st_dev = 0xC;
212 ssb->sb.st_blksize = -1;
213 ssb->sb.st_blocks = -1;
220static int php_stream_memory_set_option(
php_stream *stream,
int option,
int value,
void *ptrparam)
235 newsize = *(
size_t*)ptrparam;
237 ms->
data = zend_string_truncate(ms->
data, newsize, 0);
238 if (newsize < ms->fpos) {
243 ms->
data = zend_string_realloc(ms->
data, newsize, 0);
256 php_stream_memory_write, php_stream_memory_read,
257 php_stream_memory_close, php_stream_memory_flush,
259 php_stream_memory_seek,
260 php_stream_memory_cast,
261 php_stream_memory_stat,
262 php_stream_memory_set_option
315 ms->
data = zend_string_copy(
buf);
345static ssize_t php_stream_temp_write(
php_stream *stream,
const char *
buf,
size_t count)
397static int php_stream_temp_close(
php_stream *stream,
int close_handle)
424static int php_stream_temp_flush(
php_stream *stream)
455static int php_stream_temp_cast(
php_stream *stream,
int castas,
void **
ret)
516static int php_stream_temp_set_option(
php_stream *stream,
int option,
int value,
void *ptrparam)
536 php_stream_temp_write, php_stream_temp_read,
537 php_stream_temp_close, php_stream_temp_flush,
539 php_stream_temp_seek,
540 php_stream_temp_cast,
541 php_stream_temp_stat,
542 php_stream_temp_set_option
553 self =
ecalloc(1,
sizeof(*self));
554 self->
smax = max_memory_usage;
586 php_stream_temp_write(stream,
buf, length);
587 php_stream_temp_seek(stream, 0,
SEEK_SET, &newoffs);
598 NULL, php_stream_temp_read,
599 php_stream_temp_close, php_stream_temp_flush,
601 php_stream_temp_seek,
602 php_stream_temp_cast,
603 php_stream_temp_stat,
604 php_stream_temp_set_option
613 char *comma, *semi, *sep;
614 size_t mlen, dlen, plen, vlen, ilen;
623 if (memcmp(path,
"data:", 5)) {
630 if (dlen >= 2 && path[0] ==
'/' && path[1] ==
'/') {
635 if ((comma = memchr(path,
',', dlen)) ==
NULL) {
644 semi = memchr(path,
';', mlen);
645 sep = memchr(path,
'/', mlen);
654 add_assoc_stringl(&meta,
"mediatype", (
char *) path, mlen);
656 }
else if (sep && sep < semi) {
658 add_assoc_stringl(&meta,
"mediatype", (
char *) path, plen);
661 }
else if (semi != path || mlen !=
sizeof(
";base64")-1 || memcmp(path,
";base64",
sizeof(
";base64")-1)) {
667 while(semi && (semi == path)) {
670 sep = memchr(path,
'=', mlen);
671 semi = memchr(path,
';', mlen);
672 if (!sep || (semi && semi < sep)) {
673 if (mlen !=
sizeof(
"base64")-1 || memcmp(path,
"base64",
sizeof(
"base64")-1)) {
680 mlen -=
sizeof(
"base64") - 1;
681 path +=
sizeof(
"base64") - 1;
686 vlen = (semi ? (size_t)(semi - sep) : (mlen - plen)) - 1 ;
687 if (plen !=
sizeof(
"mediatype")-1 || memcmp(path,
"mediatype",
sizeof(
"mediatype")-1)) {
702 add_assoc_bool(&meta,
"base64", base64);
725 php_stream_temp_write(stream, comma, ilen);
726 php_stream_temp_seek(stream, 0,
SEEK_SET, &newoffs);
729 if (vlen >=
sizeof(stream->
mode)) {
730 vlen =
sizeof(stream->
mode) - 1;
733 stream->
mode[vlen] =
'\0';
741 zend_string_free(base64_comma);
750 php_stream_url_wrap_rfc2397,
PHPAPI zend_string * php_base64_decode_ex(const unsigned char *str, size_t length, bool strict)
file(string $filename, int $flags=0, $context=null)
strpbrk(string $string, string $characters)
count(Countable|array $value, int $mode=COUNT_NORMAL)
assert(mixed $assertion, Throwable|string|null $description=null)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
PHPAPI size_t php_url_decode(char *str, size_t len)
PHPAPI const char * _php_stream_mode_to_str(int mode)
PHPAPI php_stream * _php_stream_temp_open(int mode, size_t max_memory_usage, const char *buf, size_t length STREAMS_DC)
PHPAPI php_stream * _php_stream_temp_create_ex(int mode, size_t max_memory_usage, const char *tmpdir STREAMS_DC)
PHPAPI php_stream * _php_stream_memory_create(int mode STREAMS_DC)
PHPAPI php_stream * _php_stream_temp_create(int mode, size_t max_memory_usage STREAMS_DC)
PHPAPI zend_string * _php_stream_memory_get_buffer(php_stream *stream STREAMS_DC)
PHPAPI php_stream * _php_stream_memory_open(int mode, zend_string *buf STREAMS_DC)
PHPAPI int php_stream_mode_from_str(const char *mode)
PHPAPI const php_stream_wrapper_ops php_stream_rfc2397_wops
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
unsigned const char * pos
PHP_JSON_API size_t int options
#define TEMP_STREAM_DEFAULT
PHPAPI const php_stream_wrapper php_stream_rfc2397_wrapper
#define TEMP_STREAM_APPEND
#define php_stream_memory_create_rel(mode)
PHPAPI const php_stream_ops php_stream_rfc2397_ops
PHPAPI const php_stream_ops php_stream_memory_ops
#define php_stream_temp_create_rel(mode, max_memory_usage)
#define php_stream_temp_create_ex(mode, max_memory_usage, tmpdir)
PHPAPI const php_stream_ops php_stream_temp_ops
#define php_stream_memory_get_buffer(stream)
#define PHP_STREAM_IS_MEMORY
#define TEMP_STREAM_READONLY
#define php_stream_fopen_tmpfile()
#define php_stream_fopen_temporary_file(dir, pfx, opened_path)
#define php_stream_cast(stream, as, ret, show_err)
#define PHP_STREAM_IS_STDIO
struct _php_stream_wrapper_ops php_stream_wrapper_ops
struct _php_stream php_stream
struct _php_stream_context php_stream_context
#define php_stream_read(stream, buf, count)
#define PHP_STREAM_TRUNCATE_SET_SIZE
#define PHP_STREAM_FREE_PRESERVE_HANDLE
#define PHP_STREAM_FLAG_NO_BUFFER
#define php_stream_alloc_rel(ops, thisptr, persistent, mode)
#define php_stream_seek(stream, offset, whence)
#define php_stream_flush(stream)
#define PHP_STREAM_OPTION_RETURN_NOTIMPL
#define PHP_STREAM_FREE_CLOSE
#define php_stream_is(stream, anops)
#define php_stream_tell(stream)
PHPAPI php_stream * php_stream_encloses(php_stream *enclosing, php_stream *enclosed)
struct _php_stream_ops php_stream_ops
#define PHP_STREAM_OPTION_META_DATA_API
#define PHP_STREAM_OPTION_RETURN_ERR
#define php_stream_stat(stream, ssb)
#define PHP_STREAM_OPTION_TRUNCATE_API
struct _php_stream_wrapper php_stream_wrapper
#define php_stream_free_enclosed(stream_enclosed, close_options)
#define PHP_STREAM_TRUNCATE_SUPPORTED
#define php_stream_set_option(stream, option, value, ptrvalue)
#define PHP_STREAM_OPTION_RETURN_OK
#define PHP_STREAM_AS_STDIO
struct _php_stream_statbuf php_stream_statbuf
#define php_stream_write(stream, buf, count)
PHPAPI void php_stream_wrapper_log_error(const php_stream_wrapper *wrapper, int options, const char *fmt,...) PHP_ATTRIBUTE_FORMAT(printf
const php_stream_ops * ops
ZEND_API void add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length)
#define estrndup(s, length)
#define ecalloc(nmemb, size)
ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor)
struct _zend_string zend_string
#define ZSTR_EMPTY_ALLOC()
#define Z_ARRVAL_P(zval_p)
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
ZEND_API void zval_add_ref(zval *p)