register char *t;
register char *f;
bool dolong;
-#ifdef QUAD
+#ifdef HAS_QUAD
bool doquad;
-#endif /* QUAD */
+#endif /* HAS_QUAD */
char ch;
register char *send;
register SV *arg;
f = t;
*buf = '\0';
xs = buf;
-#ifdef QUAD
+#ifdef HAS_QUAD
doquad =
-#endif /* QUAD */
+#endif /* HAS_QUAD */
dolong = FALSE;
pre = post = 0;
for (t++; t < send; t++) {
len++, sarg--;
xlen = strlen(xs);
break;
+ case 'n': case '*':
+ croak("Use of %c in printf format not supported", *t);
+
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '.': case '#': case '-': case '+': case ' ':
continue;
case 'l':
-#ifdef QUAD
+#ifdef HAS_QUAD
if (dolong) {
dolong = FALSE;
doquad = TRUE;
case 'd':
ch = *(++t);
*t = '\0';
-#ifdef QUAD
+#ifdef HAS_QUAD
if (doquad)
- (void)sprintf(buf,s,(quad)SvNV(arg));
+ (void)sprintf(buf,s,(Quad_t)SvNV(arg));
else
#endif
if (dolong)
ch = *(++t);
*t = '\0';
value = SvNV(arg);
-#ifdef QUAD
+#ifdef HAS_QUAD
if (doquad)
- (void)sprintf(buf,s,(unsigned quad)value);
+ (void)sprintf(buf,s,(unsigned Quad_t)value);
else
#endif
if (dolong)
}
/* end of switch, copy results */
*t = ch;
+ if (xs == buf && xlen >= sizeof(buf)) { /* Ooops! */
+ fputs("panic: sprintf overflow - memory corrupted!\n",stderr);
+ my_exit(1);
+ }
SvGROW(sv, SvCUR(sv) + (f - s) + xlen + 1 + pre + post);
sv_catpvn(sv, s, f - s);
if (pre) {
return;
}
s = SvPV(sv, len);
- if (len && !SvPOKp(sv))
+ if (len && !SvPOK(sv))
s = SvPV_force(sv, len);
if (s && len) {
s += --len;
sv_catpvn(sv, rsave + len, rightlen - len);
else if (leftlen > len)
sv_catpvn(sv, lsave + len, leftlen - len);
+ else
+ *SvEND(sv) = '\0';
break;
}
}
if (!hv)
RETURN;
+
+ (void)hv_iterinit(hv); /* always reset iterator regardless */
+
if (GIMME != G_ARRAY) {
dTARGET;
i = HvKEYS(hv);
else {
i = 0;
- (void)hv_iterinit(hv);
/*SUPPRESS 560*/
while (entry = hv_iternext(hv)) {
i++;
/* Guess how much room we need. hv_max may be a few too many. Oh well. */
EXTEND(sp, HvMAX(hv) * (dokeys + dovalues));
- (void)hv_iterinit(hv);
-
PUTBACK; /* hv_iternext and hv_iterval might clobber stack_sp */
while (entry = hv_iternext(hv)) {
SPAGAIN;