X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=phpstr%2Fphpstr.c;h=c0d9543f3d3e4a7e5b11b9d20b3aee68f3632c04;hb=160400377eb70b98b216cd91aadf9243338d3fd5;hp=3e8e311ee464246e24ce0e9383e79039b46cf488;hpb=5c5ddf9042732a05100245844fe2fb70bfe6d495;p=m6w6%2Fext-http diff --git a/phpstr/phpstr.c b/phpstr/phpstr.c index 3e8e311..c0d9543 100644 --- a/phpstr/phpstr.c +++ b/phpstr/phpstr.c @@ -4,7 +4,7 @@ #include "php.h" #include "phpstr.h" -PHPSTR_API phpstr *phpstr_init_ex(phpstr *buf, size_t chunk_size, zend_bool pre_alloc) +PHPSTR_API phpstr *phpstr_init_ex(phpstr *buf, size_t chunk_size, int pre_alloc) { if (!buf) { buf = emalloc(sizeof(phpstr)); @@ -262,7 +262,7 @@ PHPSTR_API size_t phpstr_chunk_buffer(phpstr **s, const char *data, size_t data_ if (!chunk_size) { phpstr_data(storage, chunk, &chunk_size); - phpstr_free(&storage); + phpstr_free(s); return chunk_size; } @@ -284,10 +284,16 @@ PHPSTR_API void phpstr_chunked_output(phpstr **s, const char *data, size_t data_ while (got = phpstr_chunk_buffer(s, data, data_len, &chunk, chunk_len)) { passthru(chunk, got TSRMLS_CC); - efree(chunk); + if (!chunk_len) { + /* we already got the last chunk, + and freed all resources */ + break; + } data = NULL; data_len = 0; + STR_SET(chunk, NULL); } + STR_FREE(chunk); } /*