X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fphp_pqconn.c;h=573a49ea8f229923590a477bd72b8c814245b89f;hb=7acdd4b540f114ac8e8103df42633d5f741fb210;hp=b978bb00372d9cf6153688155f2896a6427bb37a;hpb=94be2af75078af30116718bb2df201d9e5a47e5b;p=m6w6%2Fext-pq diff --git a/src/php_pqconn.c b/src/php_pqconn.c index b978bb0..573a49e 100644 --- a/src/php_pqconn.c +++ b/src/php_pqconn.c @@ -1830,20 +1830,25 @@ static PHP_METHOD(pqconn, on) { } } -static int apply_set_converter(void *p TSRMLS_DC, int argc, va_list argv, zend_hash_key *key) +struct apply_set_converter_arg { + HashTable *ht; + zval **zconv; + unsigned add:1; +}; + +static int apply_set_converter(void *p, void *a TSRMLS_DC) { - zval *tmp, **zoid = p, **zcnv = va_arg(argv, zval **); - HashTable *converters = va_arg(argv, HashTable *); - int add = va_arg(argv, int); + zval *tmp, **zoid = p; + struct apply_set_converter_arg *arg = a; tmp = *zoid; Z_ADDREF_P(tmp); convert_to_long_ex(&tmp); - if (add) { - Z_ADDREF_PP(zcnv); - zend_hash_index_update(converters, Z_LVAL_P(tmp), zcnv, sizeof(zval *), NULL); + if (arg->add) { + Z_ADDREF_PP(arg->zconv); + zend_hash_index_update(arg->ht, Z_LVAL_P(tmp), arg->zconv, sizeof(zval *), NULL); } else { - zend_hash_index_del(converters, Z_LVAL_P(tmp)); + zend_hash_index_del(arg->ht, Z_LVAL_P(tmp)); } zval_ptr_dtor(&tmp); @@ -1869,12 +1874,19 @@ static PHP_METHOD(pqconn, setConverter) { throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized"); } else { zval *tmp, *zoids = NULL; + struct apply_set_converter_arg arg = {NULL}; zend_call_method_with_0_params(&zcnv, NULL, NULL, "converttypes", &zoids); tmp = zoids; Z_ADDREF_P(tmp); convert_to_array_ex(&tmp); - zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, apply_set_converter, 3, &zcnv, &obj->intern->converters, 1); + + arg.ht = &obj->intern->converters; + arg.zconv = &zcnv; + arg.add = 1; + + zend_hash_apply_with_argument(Z_ARRVAL_P(tmp), apply_set_converter, &arg TSRMLS_CC); + zval_ptr_dtor(&tmp); zval_ptr_dtor(&zoids); } @@ -1900,12 +1912,19 @@ static PHP_METHOD(pqconn, unsetConverter) { throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized"); } else { zval *tmp, *zoids = NULL; + struct apply_set_converter_arg arg = {NULL}; zend_call_method_with_0_params(&zcnv, NULL, NULL, "converttypes", &zoids); tmp = zoids; Z_ADDREF_P(tmp); convert_to_array_ex(&tmp); - zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, apply_set_converter, 3, &zcnv, &obj->intern->converters, 0); + + arg.ht = &obj->intern->converters; + arg.zconv = &zcnv; + arg.add = 0; + + zend_hash_apply_with_argument(Z_ARRVAL_P(tmp), apply_set_converter, &arg TSRMLS_CC); + zval_ptr_dtor(&tmp); zval_ptr_dtor(&zoids); }