On Thursday 11 October 2007 15:18, Torsten Foertsch wrote:
> if (key) {
> STRLEN len;
> char *k = SvPV(key, len);
>
> if (val) {
> retval = *hv_store(*pnotes, k, len, SvREFCNT_inc(val), 0);
> }
> else if (hv_exists(*pnotes, k, len)) {
> retval = *hv_fetch(*pnotes, k, len, FALSE);
> }
> }
> else {
> retval = newRV_inc((SV *)*pnotes);
> }
>
> return retval ? SvREFCNT_inc(retval) : &PL_sv_undef;
>
> I am wondering whether the REFCNT is always right. *pnotes is a HV. If the
> function is called without a key argument the else branch newRV_inc
> increments the REFCNT of the HV, right? Then the return statement in the
> last line increments it again? Am I wrong?
I think it should rather read:
if (key) {
STRLEN len;
char *k = SvPV(key, len);
if (val) {
retval = *hv_store(*pnotes, k, len, SvREFCNT_inc(val), 0);
}
else if (hv_exists(*pnotes, k, len)) {
retval = *hv_fetch(*pnotes, k, len, FALSE);
}
return retval ? SvREFCNT_inc(retval) : &PL_sv_undef;
}
else {
return newRV_inc((SV *)*pnotes);
}
Torsten
pgpcC1lS7CU5m.pgp
Description: PGP signature
