hmm
ok
zend_constant *c, *b;
char *sname = "myname";
c->name = name; // the c->name is just a pointer to the sname
//c->name = strdup(sname); // c->name would have it's own memory
b = c; //now b->name points to sname
free(b->name); // would try and free b->name which can't be done, segfault!
so now you do this:
zend_constant *c, *b;
char *sname = "myname";
c->name = strdup(sname); // c->name would have it's own memory
b = c; //now b->name points to a copy of sname
copy_zend_constant(b); //now b->name has its own memory
free(b->name); // now this will work no segfaults here
and if you look where copy_zend_constant it is only called when you want to
copy constants from one hash to another.
- Brad
--- Joseph Tate <[EMAIL PROTECTED]> wrote:
> I don't follow you. Why does it need to be copied? c->name already
> contains the value. Old? New? c is c is c. Commenting out the code
> causes other problems elsewhere (or seems to). I just don't understand why
> it has to be done.
>
> > -----Original Message-----
> > --- Joseph Tate <[EMAIL PROTECTED]> wrote:
> > > in the copy_zend_constant function it reads:
> > >
> > > void copy_zend_constant(zend_constant *c)
> > > {
> > > c->name = zend_strndup(c->name, c->name_len);
> > > if (!(c->flags & CONST_PERSISTENT)) {
> > > zval_copy_ctor(&c->value);
> > > if (c->flags & CONST_EFREE_PERSISTENT) { /*
> > persist_alloc()'d data */
> > > persist_alloc(&c->value);
> > > }
> > > }
> > > }
> > >
> > > I draw your attention to the first line in the function:
> > > c->name = zend_strndup(c->name, c->name_len);
> > >
> > > First of all, why is this string duplicated only to store it to the same
> > > location? Secondly, is c->name freed somewhere else? Cause I
> > can't see it
> > > being freed. Seems like this line can be removed...
> > >
> >
> > So c points to the "old" value and you need to copy the name and
> > the value to
> > the "new" one, name and value. and the way hashes and emalloc
> > works the memory
> > will be freed automatically.
> >
> >
>
__________________________________________________
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php