Re: Referencing constants in extension code

From: Date: Fri, 18 Jan 2008 01:39:23 +0000
Subject: Re: Referencing constants in extension code
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-34822@lists.php.net to get a copy of this message
On 1/17/08, Antony Dovgal <tony@daylessday.org> wrote: > On 17.01.2008 23:33, Michael B Allen wrote: > > This has worked fine > > Are you really sure? It has worked just fine under load in production with PHP 5, 5.0 and 5.1. It *seems* there's something different about 5.2. > Does valgrind confirm it? I have run valgrind (primarily for leak checking) and I don't recall seeing any complaints about the code or objects in question. > > PHP_FUNCTION(foo_status) > > { > > zval *r; > > char *s = ""; > > int slen; > > struct foo *foo = NULL; > > > > if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z!|s!", > > &r, &s, &slen) == FAILURE) { > > RETURN_FALSE; > > } > > > > if (r) > > foo = (struct foo *)zend_fetch_resource(&r TSRMLS_CC, > > -1, "foo", NULL, 1, le_foo); > > > > if (ZEND_NUM_ARGS() > 1) { > > foo_status(foo) = s; // save the status for possible retrieval later > > } > > I don't know what "foo_status(foo)" is supposed to mean here, It's saving s into foo. It's actually an errno style macro that dereferences a char ** to assign the value to a member of foo. > but this code was never supposed to work. Well it did. > You have to copy the string if you want to store it. Ok. Doesn't look like I have much choice. I just wanted to understand the problem better. I'll just copy the strings. But it does seem odd to me that PHP does not always reference string constants directly. I mean, why copy if you don't have to? Mike

« previous php.internals (#34822) next »