I have solved the problem. I had confused the functions hash_* with the funtions array_*. This works:
MAKE_STD_ZVAL(hash); array_init(hash); g_hash_table_iter_init (&iter, m->params); while (g_hash_table_iter_next (&iter, &key, &value)) { add_assoc_string(hash, key, value, 0); } Thanks for your help and your patience :) AntP 2008/9/10 mr esnafrao <[EMAIL PROTECTED]> > Thanks for your response, but I'm unable to make it work. I have changed > the code, and it works with strings and even with arrays, but not with > hashes: Am I missing something? > > zval *hash; > zval **args[2], *func, *retval; > zval *str; > > MAKE_STD_ZVAL(retval); > MAKE_STD_ZVAL(func); > ZVAL_STRING(func, estrdup(handler), 0); > > MAKE_STD_ZVAL(str); > ZVAL_STRING(str, estrdup(m->sender), 0); > > MAKE_STD_ZVAL(hash); > ALLOC_HASHTABLE(hash); > zend_hash_init(hash, 0, NULL, NULL, 1); > g_hash_table_iter_init (&iter, m->params); > while (g_hash_table_iter_next (&iter, &key, &value)) { > zend_hash_add(hash, > g_strdup(key), > strlen(key), > g_strdup(value), > strlen(value), > NULL); > } > > args[0] = &hash; > args[1] = &str; > if (call_user_function_ex(EG(function_table), > NULL, > func, > retval, > 2, > &args, > 0, > NULL TSRMLS_CC) == FAILURE) { > g_debug("error calling method: %s", handler); > } > ... > Thanks a lot! > AntP > > 2008/9/8 Marcus Boerger <[EMAIL PROTECTED]> > >> Hello mr, >> >> Monday, September 8, 2008, 6:58:19 PM, you wrote: >> >> > Hi all, >> > I'm having problems passing an array to the function call_user_function >> as >> > parameter. This is the code: >> >> > zval *args[3], *func, *retval; >> >> args maust be *** not ** >> >> > MAKE_STD_ZVAL(func); >> > MAKE_STD_ZVAL(retval); >> > MAKE_STD_ZVAL(args[0]); >> > MAKE_STD_ZVAL(args[1]); >> > MAKE_STD_ZVAL(args[2]); >> > ALLOC_HASHTABLE(args[2]); >> >> > // creates hash and fills >> > zend_hash_init(args[2], 0, NULL, NULL, 0); >> > g_hash_table_iter_init (&iter, m->params); >> > while (g_hash_table_iter_next (&iter, &key, &value)) { >> > zend_hash_add(args[2], key, strlen(key), value, strlen(value), >> > NULL); >> > } >> >> > ZVAL_STRING(args[0], estrdup(m->sender), 0); >> > ZVAL_STRING(args[1], estrdup(m->cmd), 0); >> > ZVAL_STRING(func, estrdup(handler), 0); >> >> > if (call_user_function(EG(function_table), >> > NULL, >> > func, >> > retval, 3, >> > args TSRMLS_CC) == FAILURE) { >> > g_debug("error calling method: %s", handler); >> > } >> >> > zval_dtor(retval); >> > zval_dtor(func); >> > zval_dtor(args[0]); >> > zval_dtor(args[1]); >> > zend_hash_destroy(args[2]); >> > FREE_HASHTABLE(args[2]); >> args[2] is wrong and anyway all three need to be zval_ptr_dtor() >> >> marcus >> >> > I suppose that the problem is the conversion between the Hash and the >> zval, >> > but I don't know how to do it. >> >> > Thanks in advance :) >> > regards >> >> >> >> Best regards, >> Marcus >> >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> >