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
>>
>>
>