Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:97180 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 19848 invoked from network); 25 Nov 2016 12:30:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Nov 2016 12:30:40 -0000 Authentication-Results: pb1.pair.com smtp.mail=thruska@cubiclesoft.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=thruska@cubiclesoft.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain cubiclesoft.com designates 149.56.142.28 as permitted sender) X-PHP-List-Original-Sender: thruska@cubiclesoft.com X-Host-Fingerprint: 149.56.142.28 28.ip-149-56-142.net Received: from [149.56.142.28] ([149.56.142.28:50040] helo=28.ip-149-56-142.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5A/C3-21589-FEE28385 for ; Fri, 25 Nov 2016 07:30:39 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: thruska@cubiclesoft.com) with ESMTPSA id 070A43F1F4 To: Kalle Sommer Nielsen References: <56e89e82-00aa-5521-f014-14cf4d588157@cubiclesoft.com> Cc: PHP Development Message-ID: <5d865bc1-dc06-54b8-800e-99f1c2914632@cubiclesoft.com> Date: Fri, 25 Nov 2016 05:30:33 -0700 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Translating optional zval ** with zend_parse_parameters() to PHP 7 From: thruska@cubiclesoft.com (Thomas Hruska) On 11/25/2016 12:27 AM, Kalle Sommer Nielsen wrote: > Hi Thomas > > 2016-11-25 4:13 GMT+01:00 Thomas Hruska : >> I'm working on updating an extension for PHP 7 compatibility. I have one >> function that uses an optional zval ** with zend_parse_parameters(). >> >> zval **zprevcount = NULL; >> int count; >> int argc = ZEND_NUM_ARGS(); >> >> if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|Z", >> &zprevcount) == FAILURE) return; >> >> ... >> >> if (argc > 0) >> { >> count = (int)PrevCount; >> >> zval_dtor(*zprevcount); >> ZVAL_LONG(*zprevcount, count); >> } >> >> What's the correct way to translate that into PHP 7? > > Since you are working with integers, you can do: > > zend_long prevcount = 0; > > if(zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &prevcount) == FAILURE) > { > return; > } > > if(prevcount) > { > /* ... use prevcount ... */ > } > > Notice that all integers returned from the ZPP is a zend_long, you can > see more information about the ZPP in > php-src/README.PARAMETER_PARSING_API Unless I missed something, zend_long is generally defined as a standard int64_t or int32_t type (Zend/zend_long.h). I need to be able to *modify* the original variable that was passed in. I already use "|l" and zend_long elsewhere in the extension. I'm thinking the correct ZPP string is "|z/" but the usage examples in core that I've looked at so far are inconsistent, hence the original question of what's the correct approach? -- Thomas Hruska CubicleSoft President I've got great, time saving software that you will find useful. http://cubiclesoft.com/