Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:40431 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 9572 invoked from network); 10 Sep 2008 09:51:07 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Sep 2008 09:51:07 -0000 Authentication-Results: pb1.pair.com smtp.mail=esnafrao@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=esnafrao@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.217.33 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: esnafrao@gmail.com X-Host-Fingerprint: 209.85.217.33 mail-gx0-f33.google.com Received: from [209.85.217.33] ([209.85.217.33:62183] helo=mail-gx0-f33.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 17/12-30769-A8897C84 for ; Wed, 10 Sep 2008 05:51:07 -0400 Received: by gxk14 with SMTP id 14so7401837gxk.23 for ; Wed, 10 Sep 2008 02:51:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type:references; bh=bPJZ2fXOGIoc7BvBnYpWx6NubM4n9dAFJJ4uzhndmnQ=; b=SpZQy9eNhX7LeYn8y5csWwH1ipxXZRBMPSWFh3LUoF/Ek2GpyehzeAqIMM8Yi03kBD TOP5x5Qsbnmm1GWzpFMOea6YxZFK3W7qiuP7Pw1ETiNQD+DWDSXqUhE0VNvaT7S9cisJ keUGtIUcARLU152NDR5DV4/6vPvVJs1KBFgGs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:references; b=GwNqZaEUzrvfE57rmGuvVj8aLgKbI+4mFZeUcCNTKgHRVGlYW+lzY59vJeQ2nKnnPW OfwiREnQsNnt0bwLAgvdgz3os72e1PBe3rKHJb8TbLic1qcDLEVGdAr0N9BcLB0Olb2h J4cXgmyt8i3p0wOsf1twnRuPKPiNp4/6GL5Bw= Received: by 10.67.90.10 with SMTP id s10mr6328946ugl.38.1221040262734; Wed, 10 Sep 2008 02:51:02 -0700 (PDT) Received: by 10.66.238.3 with HTTP; Wed, 10 Sep 2008 02:51:02 -0700 (PDT) Message-ID: <2a149c8c0809100251g2dc6d459ma68f01c4a6ac8d80@mail.gmail.com> Date: Wed, 10 Sep 2008 11:51:02 +0200 To: "Marcus Boerger" Cc: "PHP Developers Mailing List" In-Reply-To: <564726435.20080908235504@marcus-boerger.de> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_27941_26874894.1221040262758" References: <2a149c8c0809080958j12ddbf84l2f0b533569d69557@mail.gmail.com> <564726435.20080908235504@marcus-boerger.de> Subject: Re: [PHP-DEV] array and call_user_function From: esnafrao@gmail.com ("mr esnafrao") ------=_Part_27941_26874894.1221040262758 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline 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 > 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 > > ------=_Part_27941_26874894.1221040262758--