return; /* overflow detection */
a = (char *) HvARRAY(hv);
- if (a) {
+ if (!a) {
+ Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
+ xhv->xhv_max = --newsize;
+ HvARRAY(hv) = (HE **) a;
+ return;
+ }
+
+ {
PL_nomemok = TRUE;
Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize)
+ (SvOOK(hv) ? sizeof(struct xpvhv_aux) : 0), char);
PL_nomemok = FALSE;
Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
}
- else {
- Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- }
xhv->xhv_max = --newsize; /* HvMAX(hv) = --newsize */
HvARRAY(hv) = (HE **) a;
if (!xhv->xhv_keys /* !HvTOTALKEYS(hv) */) /* skip rest if no entries */