X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=src%2Fphp_pqres.c;h=eaaac6927dc96418e4708fac4413c2e7a2a791aa;hb=420e6ed4b6b95cf25985aed5dc6ddec06e823e41;hp=2c756558fef2bc1800b6154e8469e7681a113098;hpb=753359f19c5d29f08faca43ee735c49c217230a7;p=m6w6%2Fext-pq diff --git a/src/php_pqres.c b/src/php_pqres.c index 2c75655..eaaac69 100644 --- a/src/php_pqres.c +++ b/src/php_pqres.c @@ -873,37 +873,41 @@ static PHP_METHOD(pqres, fetchAllCols) { } } -static int apply_to_col(void *p TSRMLS_DC, int argc, va_list argv, zend_hash_key *key) +struct apply_to_col_arg { + php_pqres_object_t *obj; + php_pqres_col_t *cols; + STATUS status; +}; + +static int apply_to_col(void *p, void *a TSRMLS_DC) { zval **c = p; - php_pqres_object_t *obj = va_arg(argv, php_pqres_object_t *); - php_pqres_col_t *col, **cols = va_arg(argv, php_pqres_col_t **); - STATUS *rv = va_arg(argv, STATUS *); + struct apply_to_col_arg *arg = a; - col = *cols; - - if (SUCCESS != column_nn(obj, *c, col TSRMLS_CC)) { - *rv = FAILURE; + if (SUCCESS != column_nn(arg->obj, *c, arg->cols TSRMLS_CC)) { + arg->status = FAILURE; return ZEND_HASH_APPLY_STOP; } else { - *rv = SUCCESS; - ++*cols; + arg->status = SUCCESS; + ++arg->cols; return ZEND_HASH_APPLY_KEEP; } } static php_pqres_col_t *php_pqres_convert_to_cols(php_pqres_object_t *obj, HashTable *ht TSRMLS_DC) { - php_pqres_col_t *tmp, *cols = ecalloc(zend_hash_num_elements(ht), sizeof(*cols)); - STATUS rv = SUCCESS; + struct apply_to_col_arg arg = {NULL}; + php_pqres_col_t *tmp; - tmp = cols; - zend_hash_apply_with_arguments(ht TSRMLS_CC, apply_to_col, 2, obj, &tmp, &rv); + arg.obj = obj; + arg.cols = ecalloc(zend_hash_num_elements(ht), sizeof(*tmp)); + tmp = arg.cols; + zend_hash_apply_with_argument(ht, apply_to_col, &arg TSRMLS_CC); - if (SUCCESS == rv) { - return cols; + if (SUCCESS == arg.status) { + return tmp; } else { - efree(cols); + efree(tmp); return NULL; } } @@ -1136,7 +1140,7 @@ PHP_MINIT_FUNCTION(pqres) php_pqres_object_handlers.get_properties = php_pq_object_properties; php_pqres_object_handlers.count_elements = php_pqres_count_elements; - zend_hash_init(&php_pqres_object_prophandlers, 6, NULL, NULL, 1); + zend_hash_init(&php_pqres_object_prophandlers, 8, NULL, NULL, 1); zend_declare_property_null(php_pqres_class_entry, ZEND_STRL("status"), ZEND_ACC_PUBLIC TSRMLS_CC); ph.read = php_pqres_object_read_status;