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

Reply via email to