STRLEN prevlen;
int unref = 0;
+ sv_setpvn(t, "", 0);
retry:
if (!sv) {
sv_catpv(t, "VOID");
case SVt_NULL:
sv_catpv(t, "UNDEF");
- return tokenbuf;
+ goto finish;
case SVt_IV:
sv_catpv(t, "IV");
break;
#endif
}
else if (SvIOKp(sv)) {
+ U32 oldIOK = SvIOK(sv);
if (SvTYPE(sv) < SVt_PVIV)
sv_upgrade(sv, SVt_PVIV);
olderrno = errno; /* some Xenix systems wipe out errno here */
sv_setpvf(sv, "%Vd", SvIVX(sv));
errno = olderrno;
s = SvEND(sv);
+ if (oldIOK)
+ SvIOK_on(sv);
+ else
+ SvIOKp_on(sv);
}
else {
if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
{
append = -1;
/*
- If we're reading from a TTY and we get a short read,
- indicating that the user hit his EOF character, we need
- to notice it now, because if we try to read from the TTY
- again, the EOF condition will disappear.
-
- The "(cnt == sizeof(buf))" check is an optimization to
- prevent unnecessary calls to feof(). It seems safe
- because as far as I can tell, whenever fread() returns a
- full buffer, right before EOF, it will correctly return
- 0 bytes on the next call, even when reading from a TTY.
- However, I've only tested this on Linux; other platforms
- may vary, so it might be easier just to remove the
- optimization and just check for "! feof(fp)".
-
- - jik 9/25/96
- */
- if ((cnt == sizeof(buf)) || ! PerlIO_eof(fp))
+ * If we're reading from a TTY and we get a short read,
+ * indicating that the user hit his EOF character, we need
+ * to notice it now, because if we try to read from the TTY
+ * again, the EOF condition will disappear.
+ *
+ * The comparison of cnt to sizeof(buf) is an optimization
+ * that prevents unnecessary calls to feof().
+ *
+ * - jik 9/25/96
+ */
+ if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
goto screamer2;
}
}
need = (have > width ? have : width);
gap = need - have;
- SvGROW(sv, SvLEN(sv) + need);
+ SvGROW(sv, SvCUR(sv) + need + 1);
p = SvEND(sv);
if (esignlen && fill == '0') {
for (i = 0; i < esignlen; i++)