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

Reply via email to