pollita Sun Mar 9 18:12:32 2003 EDT Modified files: /php4/ext/standard basic_functions.c basic_functions.h user_filters.c Log: Adjustment to user filters reimplementation. Make a bucket an object containing a resource(the real bucket) and a data element for direct operations. Simplifies user interface and reduces number of function calls/reallocs needed. Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.594 php4/ext/standard/basic_functions.c:1.595 --- php4/ext/standard/basic_functions.c:1.594 Thu Mar 6 15:31:16 2003 +++ php4/ext/standard/basic_functions.c Sun Mar 9 18:12:31 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.594 2003/03/06 20:31:16 sesser Exp $ */ +/* $Id: basic_functions.c,v 1.595 2003/03/09 23:12:31 pollita Exp $ */ #include "php.h" #include "php_streams.h" @@ -898,7 +898,6 @@ PHP_FE(stream_bucket_prepend, NULL) PHP_FE(stream_bucket_append, NULL) PHP_FE(stream_bucket_new, NULL) - PHP_FE(stream_bucket, NULL) /* functions from aggregate.c */ PHP_FE(aggregate, first_arg_force_ref) Index: php4/ext/standard/basic_functions.h diff -u php4/ext/standard/basic_functions.h:1.114 php4/ext/standard/basic_functions.h:1.115 --- php4/ext/standard/basic_functions.h:1.114 Mon Feb 24 16:56:19 2003 +++ php4/ext/standard/basic_functions.h Sun Mar 9 18:12:31 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.h,v 1.114 2003/02/24 21:56:19 pollita Exp $ */ +/* $Id: basic_functions.h,v 1.115 2003/03/09 23:12:31 pollita Exp $ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H @@ -113,7 +113,6 @@ PHP_FUNCTION(stream_bucket_prepend); PHP_FUNCTION(stream_bucket_append); PHP_FUNCTION(stream_bucket_new); -PHP_FUNCTION(stream_bucket); PHP_MINIT_FUNCTION(user_filters); #ifdef PHP_WIN32 Index: php4/ext/standard/user_filters.c diff -u php4/ext/standard/user_filters.c:1.11 php4/ext/standard/user_filters.c:1.12 --- php4/ext/standard/user_filters.c:1.11 Mon Feb 24 16:56:18 2003 +++ php4/ext/standard/user_filters.c Sun Mar 9 18:12:31 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: user_filters.c,v 1.11 2003/02/24 21:56:18 pollita Exp $ */ +/* $Id: user_filters.c,v 1.12 2003/03/09 23:12:31 pollita Exp $ */ /* * TODO: Rewrite for buckets. @@ -167,7 +167,7 @@ zval *zclosing, *zconsumed, *zin, *zout, *zstream; int call_result; - if (FAILURE == zend_hash_find(Z_OBJPROP_P(obj), "stream", 6, (void**)&zstream)) { + if (FAILURE == zend_hash_find(Z_OBJPROP_P(obj), "stream", 7, (void**)&zstream)) { /* Give the userfilter class a hook back to the stream */ ALLOC_ZVAL(zstream); ZEND_REGISTER_RESOURCE(zstream, stream, le_stream); @@ -322,11 +322,11 @@ { } -/* {{{ proto resource stream_bucket_make_writeable(resource brigade) - Return a bucket from the brigade for operating on */ +/* {{{ proto object stream_bucket_make_writeable(resource brigade) + Return a bucket object from the brigade for operating on */ PHP_FUNCTION(stream_bucket_make_writeable) { - zval *zbrigade; + zval *zbrigade, *zbucket; php_stream_bucket_brigade *brigade; php_stream_bucket *bucket; @@ -339,7 +339,12 @@ ZVAL_NULL(return_value); if (brigade->head && (bucket = php_stream_bucket_make_writeable(brigade->head TSRMLS_CC))) { - ZEND_REGISTER_RESOURCE(return_value, bucket, le_bucket); + ALLOC_INIT_ZVAL(zbucket); + ZEND_REGISTER_RESOURCE(zbucket, bucket, le_bucket); + object_init(return_value); + add_property_zval(return_value, "bucket", zbucket); + add_property_stringl(return_value, "data", bucket->buf, bucket->buflen, 1); + add_property_long(return_value, "datalen", bucket->buflen); } } /* }}} */ @@ -347,16 +352,33 @@ /* {{{ php_stream_bucket_attach */ static void php_stream_bucket_attach(int append, INTERNAL_FUNCTION_PARAMETERS) { - zval *zbrigade, *zbucket; + zval *zbrigade, *zobject; + zval **pzbucket, **pzdata; php_stream_bucket_brigade *brigade; php_stream_bucket *bucket; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &zbrigade, &zbucket) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zo", &zbrigade, &zobject) == FAILURE) { + RETURN_FALSE; + } + + if (FAILURE == zend_hash_find(Z_OBJPROP_P(zobject), "bucket", 7, (void**)&pzbucket)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Object has no bucket property"); RETURN_FALSE; } ZEND_FETCH_RESOURCE(brigade, php_stream_bucket_brigade *, &zbrigade, -1, PHP_STREAM_BRIGADE_RES_NAME, le_bucket_brigade); - ZEND_FETCH_RESOURCE(bucket, php_stream_bucket *, &zbucket, -1, PHP_STREAM_BUCKET_RES_NAME, le_bucket); + ZEND_FETCH_RESOURCE(bucket, php_stream_bucket *, pzbucket, -1, PHP_STREAM_BUCKET_RES_NAME, le_bucket); + + if (SUCCESS == zend_hash_find(Z_OBJPROP_P(zobject), "data", 5, (void**)&pzdata) && (*pzdata)->type == IS_STRING) { + if (!bucket->own_buf) { + bucket = php_stream_bucket_make_writeable(bucket TSRMLS_CC); + } + if (bucket->buflen != Z_STRLEN_PP(pzdata)) { + bucket->buf = perealloc(bucket->buf, Z_STRLEN_PP(pzdata), bucket->is_persistent); + bucket->buflen = Z_STRLEN_PP(pzdata); + } + memcpy(bucket->buf, Z_STRVAL_PP(pzdata), bucket->buflen); + } if (append) { php_stream_bucket_append(brigade, bucket TSRMLS_CC); @@ -386,7 +408,7 @@ Create a new bucket for use on the current stream */ PHP_FUNCTION(stream_bucket_new) { - zval *zstream; + zval *zstream, *zbucket; php_stream *stream; char *buffer; char *pbuffer; @@ -407,35 +429,12 @@ bucket = php_stream_bucket_new(stream, pbuffer, buffer_len, 1, php_stream_is_persistent(stream) TSRMLS_CC); - ZEND_REGISTER_RESOURCE(return_value, bucket, le_bucket); -} -/* }}} */ - -/* {{{ proto string stream_bucket(resource bucket[, string buffer]) - Get/Set Bucket Contents */ -PHP_FUNCTION(stream_bucket) -{ - char *buffer = NULL; - int buffer_len = 0; - zval *zbucket; - php_stream_bucket *bucket; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &zbucket, &buffer, &buffer_len) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(bucket, php_stream_bucket *, &zbucket, -1, PHP_STREAM_BUCKET_RES_NAME, le_bucket); - - if (buffer) { - if (bucket->buf && bucket->own_buf) { - pefree(bucket->buf, bucket->is_persistent); - } - bucket->buf = pemalloc(buffer_len, bucket->is_persistent); - memcpy(bucket->buf, buffer, buffer_len); - bucket->buflen = buffer_len; - bucket->own_buf = 1; - } - RETURN_STRINGL(bucket->buf, bucket->buflen, 1); + ALLOC_INIT_ZVAL(zbucket); + ZEND_REGISTER_RESOURCE(zbucket, bucket, le_bucket); + object_init(return_value); + add_property_zval(return_value, "bucket", zbucket); + add_property_stringl(return_value, "data", bucket->buf, bucket->buflen, 1); + add_property_long(return_value, "datalen", bucket->buflen); } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php