X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_std_defs.h;h=e8f8b4dca30c335ab3d59e0f52e10d7b8040593a;hp=c7646b7cd857e6d30158fc7ed163d5e9db78ebd3;hb=d5b4a39bf319a580eb7310afb691c81e44e52d71;hpb=19bdceaf74694339a5b6311a4144c1af5468f87a diff --git a/php_http_std_defs.h b/php_http_std_defs.h index c7646b7..e8f8b4d 100644 --- a/php_http_std_defs.h +++ b/php_http_std_defs.h @@ -66,17 +66,17 @@ typedef int STATUS; RETVAL_OBJECT(o); \ return #define RETVAL_OBJVAL(ov) \ - ZVAL_OBJVAL(return_value, ov) + ZVAL_OBJVAL(return_value, ov) \ + if (Z_OBJ_HT_P(return_value)->add_ref) { \ + Z_OBJ_HT_P(return_value)->add_ref(return_value TSRMLS_CC); \ + } #define RETURN_OBJVAL(ov) \ RETVAL_OBJVAL(ov); \ return #define ZVAL_OBJVAL(zv, ov) \ (zv)->type = IS_OBJECT; \ - (zv)->value.obj = (ov); \ - if (Z_OBJ_HT_P(zv)->add_ref) { \ - Z_OBJ_HT_P(zv)->add_ref((zv) TSRMLS_CC); \ - } - + (zv)->value.obj = (ov); + /* function accepts no args */ #define NO_ARGS \ if (ZEND_NUM_ARGS()) { \ @@ -146,7 +146,14 @@ typedef int STATUS; for ( zend_hash_internal_pointer_reset(hash); \ zend_hash_get_current_key(hash, &strkey, &numkey, 0) != HASH_KEY_NON_EXISTANT && \ zend_hash_get_current_data(hash, (void **) &val) == SUCCESS; \ - zend_hash_move_forward(hash)) \ + zend_hash_move_forward(hash)) + +#define FOREACH_KEYLENVAL(array, strkey, keylen, numkey, val) FOREACH_HASH_KEYVAL(Z_ARRVAL_P(array), strkey, keylen, numkey, val) +#define FOREACH_HASH_KEYLENVAL(hash, strkey, keylen, numkey, val) \ + for ( zend_hash_internal_pointer_reset(hash); \ + zend_hash_get_current_key_ex(hash, &strkey, &keylen, &numkey, 0, NULL) != HASH_KEY_NON_EXISTANT && \ + zend_hash_get_current_data(hash, (void **) &val) == SUCCESS; \ + zend_hash_move_forward(hash)) #define array_copy(src, dst) zend_hash_copy(Z_ARRVAL_P(dst), Z_ARRVAL_P(src), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)) #define array_merge(src, dst) zend_hash_merge(Z_ARRVAL_P(dst), Z_ARRVAL_P(src), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *), 1) @@ -190,6 +197,7 @@ typedef int STATUS; # define HTTP_REGISTER_CLASS_EX(classname, name, parent, flags) \ { \ zend_class_entry ce; \ + memset(&ce, 0, sizeof(zend_class_entry)); \ INIT_CLASS_ENTRY(ce, #classname, name## _fe); \ ce.create_object = _ ##name## _new; \ name## _ce = zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC); \