}
if (as_raw) {
-#if defined(USE_64_BIT_OFFSETS) && defined(O_LARGEFILE)
+#if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
rawmode |= O_LARGEFILE;
#endif
}
if (IoIFP(thatio)) {
PerlIO *fp = IoIFP(thatio);
- /* Flush stdio buffer before dup */
+ /* Flush stdio buffer before dup. --mjd
+ * Unfortunately SEEK_CURing 0 seems to
+ * be optimized away on most platforms;
+ * only Solaris and Linux seem to flush
+ * on that. --jhi */
PerlIO_seek(fp, 0, SEEK_CUR);
+ /* On the other hand, do all platforms
+ * take gracefully to flushing a read-only
+ * filehandle? Perhaps we should do
+ * fsetpos(src)+fgetpos(dst)? --nik */
+ PerlIO_flush(fp);
fd = PerlIO_fileno(fp);
if (IoTYPE(thatio) == 's')
IoTYPE(io) = 's';
if (SvIOK(sv)) {
if (SvGMAGICAL(sv))
mg_get(sv);
-#ifdef IV_IS_QUAD
if (SvIsUV(sv))
- PerlIO_printf(fp, "%" PERL_PRIu64, (UV)SvUVX(sv));
+ PerlIO_printf(fp, "%"UVuf, (UV)SvUVX(sv));
else
- PerlIO_printf(fp, "%" PERL_PRId64, (IV)SvIVX(sv));
-#else
- if (SvIsUV(sv))
- PerlIO_printf(fp, "%lu", (unsigned long)SvUVX(sv));
- else
- PerlIO_printf(fp, "%ld", (long)SvIVX(sv));
-#endif
+ PerlIO_printf(fp, "%"IVdf, (IV)SvIVX(sv));
return !PerlIO_error(fp);
}
/* FALL THROUGH */
tmps = SvPV(sv, len);
break;
}
+ /* To detect whether the process is about to overstep its
+ * filesize limit we would need getrlimit(). We could then
+ * also transparently raise the limit with setrlimit() --
+ * but only until the system hard limit/the filesystem limit,
+ * at which we would get EPERM. Note that when using buffered
+ * io the write failure can be delayed until the flush/close. --jhi */
if (len && (PerlIO_write(fp,tmps,len) == 0 || PerlIO_error(fp)))
return FALSE;
return !PerlIO_error(fp);
else
{
IV i = SvIV(astr);
- a = (char *)i; /* ouch */
+ a = INT2PTR(char *,i); /* ouch */
}
SETERRNO(0,0);
switch (optype)