#define gv_stashpvn(str,len,flags) gv_stashpv(str,flags)
#endif
+#ifndef __attribute__noreturn__
+# define __attribute__noreturn__
+#endif
+
+#ifndef NORETURN_FUNCTION_END
+# define NORETURN_FUNCTION_END /* NOT REACHED */ return 0
+#endif
+
+static int not_here(const char *s) __attribute__noreturn__;
static int
-not_here(char *s)
+not_here(const char *s)
{
croak("%s not implemented on this architecture", s);
- return -1;
+ NORETURN_FUNCTION_END;
}
}
#endif
if (newmode != mode) {
- int ret;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,newmode);
+ const int ret = fcntl(PerlIO_fileno(f),F_SETFL,newmode);
if (ret < 0)
RETVAL = ret;
}
CODE:
if (handle) {
#ifdef PerlIO
- ST(0) = sv_2mortal(newSV(0));
+#if PERL_VERSION < 8
+ Fpos_t pos;
+ ST(0) = sv_newmortal();
+ if (PerlIO_getpos(handle, &pos) != 0) {
+ ST(0) = &PL_sv_undef;
+ }
+ else {
+ sv_setpvn(ST(0), (char *)&pos, sizeof(Fpos_t));
+ }
+#else
+ ST(0) = sv_newmortal();
if (PerlIO_getpos(handle, ST(0)) != 0) {
ST(0) = &PL_sv_undef;
}
+#endif
#else
+ Fpos_t pos;
if (fgetpos(handle, &pos)) {
ST(0) = &PL_sv_undef;
} else {
- ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
+ ST(0) = sv_2mortal(newSVpvn((char*)&pos, sizeof(Fpos_t)));
}
#endif
}
else {
- ST(0) = &PL_sv_undef;
errno = EINVAL;
+ ST(0) = &PL_sv_undef;
}
SysRet
CODE:
if (handle) {
#ifdef PerlIO
+#if PERL_VERSION < 8
+ char *p;
+ STRLEN len;
+ if (SvOK(pos) && (p = SvPV(pos,len)) && len == sizeof(Fpos_t)) {
+ RETVAL = PerlIO_setpos(handle, (Fpos_t*)p);
+ }
+ else {
+ RETVAL = -1;
+ errno = EINVAL;
+ }
+#else
RETVAL = PerlIO_setpos(handle, pos);
+#endif
#else
char *p;
STRLEN len;
void
new_tmpfile(packname = "IO::File")
- char * packname
+ char * packname
PREINIT:
OutputStream fp;
GV *gv;
fp = tmpfile();
#endif
gv = (GV*)SvREFCNT_inc(newGVgen(packname));
- hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD);
- if (do_open(gv, "+>&", 3, FALSE, 0, 0, fp)) {
+ if (gv)
+ hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD);
+ if (gv && do_open(gv, "+>&", 3, FALSE, 0, 0, fp)) {
ST(0) = sv_2mortal(newRV((SV*)gv));
sv_bless(ST(0), gv_stashpv(packname, TRUE));
SvREFCNT_dec(gv); /* undo increment in newRV() */
PPCODE:
{
#ifdef HAS_POLL
- int nfd = (items - 1) / 2;
+ const int nfd = (items - 1) / 2;
SV *tmpsv = NEWSV(999,nfd * sizeof(struct pollfd));
struct pollfd *fds = (struct pollfd *)SvPVX(tmpsv);
int i,j,ret;
PROTOTYPE: $;$
CODE:
{
- int ret = io_blocking(aTHX_ handle, items == 1 ? -1 : blk ? 1 : 0);
+ const int ret = io_blocking(aTHX_ handle, items == 1 ? -1 : blk ? 1 : 0);
if(ret >= 0)
XSRETURN_IV(ret);
else