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

Reply via email to