Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:97196 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 1827 invoked from network); 26 Nov 2016 11:29:37 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Nov 2016 11:29:37 -0000 Authentication-Results: pb1.pair.com smtp.mail=cmbecker69@gmx.de; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=cmbecker69@gmx.de; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmx.de designates 212.227.15.19 as permitted sender) X-PHP-List-Original-Sender: cmbecker69@gmx.de X-Host-Fingerprint: 212.227.15.19 mout.gmx.net Received: from [212.227.15.19] ([212.227.15.19:58083] helo=mout.gmx.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id EF/EE-21589-F1279385 for ; Sat, 26 Nov 2016 06:29:36 -0500 Received: from [192.168.1.190] ([217.82.239.250]) by mail.gmx.com (mrgmx003 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MMShK-1c5dt11iMY-008GMB; Sat, 26 Nov 2016 12:29:29 +0100 To: Thomas Hruska , Jakub Zelenka , Kalle Sommer Nielsen References: <56e89e82-00aa-5521-f014-14cf4d588157@cubiclesoft.com> <5d865bc1-dc06-54b8-800e-99f1c2914632@cubiclesoft.com> <024beaa8-b93a-10e5-bbe1-f1af1b950b81@cubiclesoft.com> Cc: PHP internals list Message-ID: Date: Sat, 26 Nov 2016 12:29:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <024beaa8-b93a-10e5-bbe1-f1af1b950b81@cubiclesoft.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:CueJ8QdUMvAUSApB6RADQEL8a5eBJggAoLTZN7LANpfv6YATMVM OyTXBuwe66hORAsrDo3VFPjUGxoObX6jHlCS9GORohO3EdArSukn3iDYEWDrAFw7zf+aOvk ITt3g0vq8A57uK1OwzWRp/sPW6ez5seRD+AICInFJzVmCPPxjGGw68KRLimjB/PIl+F1sPG H76pL+dFiWOCJx5PcVXyg== X-UI-Out-Filterresults: notjunk:1;V01:K0:rVTaGxMIdAk=:q8KTnyXJv40XWk/9h72/tC 0hlU66D17sSwABGt1BDub/amDTdPePkXLSYhVNfnLbhI6GMAq1mBtOQiSwnh4ASHljNQ1+uOT QRTXK7kUhcfm+emF2fYK9B19PKl0hKtzpGnaACEPjjzBBclghvBUG2qIA4KUq9pL6vm9Mmqos 0Yjh3FG1CxQ4iyIwrw15z7anmcUOBBaZ7WuiRZBRlrVqohUmmaEluONNDcjIJhUSZH+PQAWuD PfnzveFjT5CO7+OBbq28V5WguPuakFD9MlsNjGbMKSAkRmejSvr/QX5TSFhLqgXlyXo38phzU du02G1gwuIi0MOgs4qiCW0WvE3ZSyEoZU5RHgq/BAzdXyqy1pHlkrgG88PZKFdCw4e8JUn/a8 NOktrAMiayaTzU3PPlotMg3chxTYdJAqyOiahtvMp4mMtvGgz9AHUhc/uKTsESy8J+UxCjy9g BukTYQ+XKMiXCw/AeBQwd6Ou6MsMABfMo+oQUNVi4bj1C9tf8qZXk1IiD0pOc5s5vu50lSP/X QqVdtUtY3G3itmUvAEqCIRJC7yFG101gvukJX7c8DbZJjJ0+zAiO1B0zmmYDaKRqiupZr1PAP TRaw4x+cgt52OCkKf0UWFKfs1BbEQlbSd1uDdRtlNY3GuVc5I6D9xXhvFjhn8uGFQQE0rg997 hJiGbGzzSPkDi/ioITjy3heK3GLsJWGTKmec9U0iSL+a29+7p5LMra87cB9DDJ/SOndHplUEq gi2iemPPQ7KJ0OC4iK1NbRiD6p9Pg3GmlgCul2JSje0G3IvYeFDYnyCqSHVISTTf+DRMLalwE 2JSZcSc Subject: Re: [PHP-DEV] Translating optional zval ** withzend_parse_parameters() to PHP 7 From: cmbecker69@gmx.de ("Christoph M. Becker") On 26.11.2016 at 01:47, Thomas Hruska wrote: > Okay, everyone has been helpful. Thanks. I'll go with: > > > zval *zprevcount = NULL; > zend_long count; > > if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z/", > &zprevcount) == FAILURE) return; > > ... > > if (zprevcount != NULL) > { > count = (zend_long)PrevCount; > > zval_dtor(zprevcount); > ZVAL_LONG(zprevcount, count); > } > > > Just one little thing I found in php_str_replace_common() in > ext/standard/string.c. That particular function calls zval_ptr_dtor() > instead of zval_dtor() on zcount. Just wondering why it does that - I'm > thinking it has something to do with removing the ZPP call for PHP 7 and > using the (mostly undocumented?) Z_PARAM_ZVAL_EX() macro. However, > php_do_pcre_match() over in ext/pcre/php_pcre.c calls zval_dtor() on > subpats but also uses the Z_PARAM_ZVAL_EX() macro in a similar fashion. > Looking back at PHP 5.6's php_str_replace_common() shows that it > previously called zval_dtor(). So it might also be a bug of some sort. zval_dtor() destroys the value; zval_ptr_dtor() decrements the refcount, and destroys the value only if the refcount has dropped to 0. See also (which is written for PHP 5, but is still useful). In your case, zval_dtor() is appropriate, as the zval has already been separated (ZPP's /), so there can't be other references. -- Christoph M. Becker