On 11/25/2016 4:32 PM, Jakub Zelenka wrote:
On 25 Nov 2016 20:43, "Kalle Sommer Nielsen" <ka...@php.net> wrote:

2016-11-25 13:30 GMT+01:00 Thomas Hruska <thru...@cubiclesoft.com>:
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

Ah my bad I misread it!

In that case take a look at where such is implemented in php-src,
dns_get_record() is an example despite the slightly clouded code:
http://git.php.net/?p=php-src.git;a=blob;f=ext/standard/dns.c;h=
f92015eee90d3e93a801e93d6381d89923825166;hb=refs/heads/master#l1011

See $weight_list:

- Check if the argument is passed
- zval_dtor()
- Populate it (ZVAL_LONG is the same)

The main difference from your code is to use 'z' (lower case) in ZPP,
and then use zval* (which is what 'z' returns).



You also need set 1 for the first param of ZEND_ARG_INFO (specify that it
is a ref param) otherwise it won't use the changed val...

Jakub

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.

--
Thomas Hruska
CubicleSoft President

I've got great, time saving software that you will find useful.

http://cubiclesoft.com/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to