Author: turnstep
Date: Thu Feb 24 13:02:38 2011
New Revision: 14723

Modified:
   DBD-Pg/trunk/dbdimp.c

Log:
More fixes for hv_store_ent per earlier commit.


Modified: DBD-Pg/trunk/dbdimp.c
==============================================================================
--- DBD-Pg/trunk/dbdimp.c       (original)
+++ DBD-Pg/trunk/dbdimp.c       Thu Feb 24 13:02:38 2011
@@ -922,10 +922,13 @@
                        ph_t *currph;
                        int i;
                        for (i=0,currph=imp_sth->ph; NULL != currph; 
currph=currph->nextph,i++) {
-                               (void)hv_store_ent 
-                                       (pvhv,
-                                        (3==imp_sth->placeholder_type ? 
newSVpv(currph->fooname,0) : newSViv(i+1)),
-                                        newSViv(NULL == currph->bind_type ? 0 
: 1), 0);
+                SV *key, *val;
+                key = (3==imp_sth->placeholder_type ? 
newSVpv(currph->fooname,0) : newSViv(i+1));
+                               val = newSViv(NULL == currph->bind_type ? 0 : 
1);
+                               if (! hv_store_ent(pvhv, key, val, 0)) {
+                                       SvREFCNT_dec(val);
+                               }
+                               SvREFCNT_dec(key);
                        }
                        retsv = newRV_noinc((SV*)pvhv);
                }
@@ -944,10 +947,13 @@
                        ph_t *currph;
                        int i;
                        for (i=0,currph=imp_sth->ph; NULL != currph; 
currph=currph->nextph,i++) {
+                               SV *key, *val;
+                               key = (3==imp_sth->placeholder_type ? 
newSVpv(currph->fooname,0) : newSViv(i+1));
                                if (NULL == currph->bind_type) {
-                                       (void)hv_store_ent
-                                               (pvhv, 
(3==imp_sth->placeholder_type ? newSVpv(currph->fooname,0) : newSViv(i+1)),
-                                                newSV(0), 0);
+                                       val = newSV(0);
+                                       if (! hv_store_ent(pvhv, key, val, 0)) {
+                                               SvREFCNT_dec(val);
+                                       }
                                }
                                else {
                                        HV *pvhv2 = newHV();
@@ -957,10 +963,12 @@
                                        else {
                                                (void)hv_store(pvhv2, 
"pg_type", 7, newSViv(currph->bind_type->type_id), 0);
                                        }
-                                       (void)hv_store_ent
-                                               (pvhv, 
(3==imp_sth->placeholder_type ? newSVpv(currph->fooname,0) : newSViv(i+1)),
-                                                newRV_noinc((SV*)pvhv2), 0);
+                                       val = newRV_noinc((SV*)pvhv2);
+                                       if (! hv_store_ent(pvhv, key, val, 0)) {
+                                               SvREFCNT_dec(val);
+                                       }
                                }
+                               SvREFCNT_dec(key);
                        }
                        retsv = newRV_noinc((SV*)pvhv);
                }
@@ -979,16 +987,16 @@
                                if (NULL == currph->value) {
                     val = newSV(0);
                                        if (!hv_store_ent(pvhv, key, val, 0)) {
-                        SvREFCNT_dec(val) ;
+                        SvREFCNT_dec(val);
                     }
                                }
                                else {
                     val = newSVpv(currph->value,0);
                                        if (!hv_store_ent(pvhv, key, val, 0)) {
-                        SvREFCNT_dec(val) ;
+                        SvREFCNT_dec(val);
                     }
                                }
-                SvREFCNT_dec(key) ;
+                SvREFCNT_dec(key);
                        }
                        retsv = newRV_noinc((SV*)pvhv);
                }

Reply via email to