static int apply_unlisten(void *p TSRMLS_DC, int argc, va_list argv, zend_hash_key *key)
{
php_pqconn_object_t *obj = va_arg(argv, php_pqconn_object_t *);
- PGresult *res = unlisten(obj->intern->conn, key->arKey, key->nKeyLength - 1);
+ PGresult *res = unlisten(obj->intern->conn, key->arKey, key->nKeyLength - 1 TSRMLS_CC);
if (res) {
PHP_PQclear(res);
if (!obj->intern) {
throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized");
} else if (SUCCESS == zend_hash_del(&obj->intern->listeners, channel_str, channel_len + 1)) {
- PGresult *res = unlisten(obj->intern->conn, channel_str, channel_len);
+ PGresult *res = unlisten(obj->intern->conn, channel_str, channel_len TSRMLS_CC);
if (res) {
php_pqres_success(res TSRMLS_CC);
}
}
-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);
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);
}
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);
}