- don't make these zvals references
[m6w6/ext-http] / php_http_std_defs.h
index c13f3bd4fe1990bd76dd993f79ee877520e9e2cb..bf0871e989d8dce8709115f4d40a77dbb9b04690 100644 (file)
@@ -1,16 +1,13 @@
 /*
-   +----------------------------------------------------------------------+
-   | PECL :: http                                                         |
-   +----------------------------------------------------------------------+
-   | This source file is subject to version 3.0 of the PHP license, that  |
-   | is bundled with this package in the file LICENSE, and is available   |
-   | through the world-wide-web at http://www.php.net/license/3_0.txt.    |
-   | If you did not receive a copy of the PHP license and are unable to   |
-   | obtain it through the world-wide-web, please send a note to          |
-   | license@php.net so we can mail you a copy immediately.               |
-   +----------------------------------------------------------------------+
-   | Copyright (c) 2004-2005 Michael Wallner <mike@php.net>               |
-   +----------------------------------------------------------------------+
+    +--------------------------------------------------------------------+
+    | PECL :: http                                                       |
+    +--------------------------------------------------------------------+
+    | Redistribution and use in source and binary forms, with or without |
+    | modification, are permitted provided that the conditions mentioned |
+    | in the accompanying LICENSE file are met.                          |
+    +--------------------------------------------------------------------+
+    | Copyright (c) 2004-2005, Michael Wallner <mike@php.net>            |
+    +--------------------------------------------------------------------+
 */
 
 /* $Id$ */
@@ -74,7 +71,7 @@ typedef int STATUS;
        RETVAL_OBJVAL(ov); \
        return
 #define ZVAL_OBJVAL(zv, ov) \
-       (zv)->is_ref = 1; \
+       INIT_PZVAL(zv); \
        (zv)->type = IS_OBJECT; \
        (zv)->value.obj = (ov); \
        if (Z_OBJ_HT_P(zv)->add_ref) { \
@@ -108,7 +105,7 @@ typedef int STATUS;
 #define HTTP_URI_ARGSEP HTTP_URL_ARGSEP
 
 /* send buffer size */
-#define HTTP_SENDBUF_SIZE 2097152
+#define HTTP_SENDBUF_SIZE 40960
 
 /* CURL buffer size */
 #define HTTP_CURLBUF_SIZE 16384
@@ -177,7 +174,7 @@ typedef int STATUS;
                                } else { \
                                        add_assoc_zval(dst, key, *data); \
                                } \
-                               zval_add_ref(data); \
+                               ZVAL_ADDREF(*data); \
                                key = NULL; \
                        } \
                } \
@@ -195,7 +192,7 @@ typedef int STATUS;
        { \
                zend_class_entry ce; \
                INIT_CLASS_ENTRY(ce, #classname, name## _fe); \
-               ce.create_object = name## _new; \
+               ce.create_object = _ ##name## _new; \
                name## _ce = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \
                name## _ce->ce_flags |= flags;  \
                memcpy(& name## _handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
@@ -222,7 +219,7 @@ typedef int STATUS;
 
 #      define getObject(t, o) getObjectEx(t, o, getThis())
 #      define getObjectEx(t, o, v) t * o = ((t *) zend_object_store_get_object(v TSRMLS_CC))
-#      define putObject(t, o) zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) t## _free, NULL TSRMLS_CC);
+#      define putObject(t, o) zend_objects_store_put(o, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) _ ##t## _free, NULL TSRMLS_CC);
 #      define OBJ_PROP(o) (o)->zo.properties
 
 #      define DCL_STATIC_PROP(a, t, n, v)              zend_declare_property_ ##t(ce, (#n), sizeof(#n)-1, (v), (ZEND_ACC_ ##a | ZEND_ACC_STATIC) TSRMLS_CC)
@@ -267,6 +264,18 @@ typedef int STATUS;
                } \
        }
 
+/*
+ * the property *MUST* be updated after SEP_PROP()
+ */ 
+#      define SEP_PROP(zpp) \
+       { \
+               zval **op = zpp; \
+               SEPARATE_ZVAL_IF_NOT_REF(zpp); \
+               if (op != zpp) { \
+                       zval_ptr_dtor(op); \
+               } \
+       }
+
 #      define SET_EH_THROW() SET_EH_THROW_EX(zend_exception_get_default())
 #      define SET_EH_THROW_HTTP() SET_EH_THROW_EX(http_exception_get_default())
 #      define SET_EH_THROW_EX(ex) php_set_error_handling(EH_THROW, ex TSRMLS_CC)
@@ -360,7 +369,17 @@ typedef int STATUS;
                        static unsigned char http_arg_pass_ref_5[] = {5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE};
 #      endif /* ZEND_ENGINE_2 */
 #else
-#      define HTTP_DECLARE_ARG_PASS_INFO()
+#      ifdef ZEND_ENGINE_2
+#              define HTTP_DECLARE_ARG_PASS_INFO() \
+                       static \
+                       ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_2, 0) \
+                               ZEND_ARG_PASS_INFO(0) \
+                               ZEND_ARG_PASS_INFO(1) \
+                       ZEND_END_ARG_INFO();
+#      else
+#              define HTTP_DECLARE_ARG_PASS_INFO() \
+                       static unsigned char http_arg_pass_ref_2[] = {2, BYREF_NONE, BYREF_FORCE};
+#      endif /* ZEND_ENGINE_2 */
 #endif /* HTTP_HAVE_CURL */
 
 
@@ -411,6 +430,31 @@ typedef int STATUS;
 #define PHP_MSHUTDOWN_CALL(func) PHP_MSHUTDOWN(func)(SHUTDOWN_FUNC_ARGS_PASSTHRU)
 #define PHP_RSHUTDOWN_CALL(func) PHP_RSHUTDOWN(func)(SHUTDOWN_FUNC_ARGS_PASSTHRU)
 
+#define Z_OBJ_DELREF(z) \
+       if (Z_OBJ_HT(z)->del_ref) { \
+               Z_OBJ_HT(z)->del_ref(&(z) TSRMLS_CC); \
+       }
+#define Z_OBJ_ADDREF(z) \
+       if (Z_OBJ_HT(z)->add_ref) { \
+               Z_OBJ_HT(z)->add_ref(&(z) TSRMLS_CC); \
+       }
+#define Z_OBJ_DELREF_P(z) \
+       if (Z_OBJ_HT_P(z)->del_ref) { \
+               Z_OBJ_HT_P(z)->del_ref((z) TSRMLS_CC); \
+       }
+#define Z_OBJ_ADDREF_P(z) \
+       if (Z_OBJ_HT_P(z)->add_ref) { \
+               Z_OBJ_HT_P(z)->add_ref((z) TSRMLS_CC); \
+       }
+#define Z_OBJ_DELREF_PP(z) \
+       if (Z_OBJ_HT_PP(z)->del_ref) { \
+               Z_OBJ_HT_PP(z)->del_ref(*(z) TSRMLS_CC); \
+       }
+#define Z_OBJ_ADDREF_PP(z) \
+       if (Z_OBJ_HT_PP(z)->add_ref) { \
+               Z_OBJ_HT_PP(z)->add_ref(*(z) TSRMLS_CC); \
+       }
+
 #endif /* PHP_HTTP_STD_DEFS_H */
 
 /*