X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perlio.c;h=8d54f77f42411457385835a8ef6447730568b8d2;hb=a17c7222566eaf13f314408f16003962518296ed;hp=0da88139c75b435765b2d6834daf7b67df576497;hpb=c3d7c7c914f938b68b6bb6c87dcf5a1eeac909cd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perlio.c b/perlio.c index 0da8813..8d54f77 100644 --- a/perlio.c +++ b/perlio.c @@ -385,7 +385,7 @@ PerlIO_default_layer(I32 n) av_push(PerlIO_layer_av,SvREFCNT_inc(layer)); } else - Perl_warn(aTHX_ "Unknown layer %.*s",(e-s),s); + Perl_warn(aTHX_ "perlio: unknown layer \"%.*s\"",(e-s),s); s = e; } } @@ -1823,6 +1823,7 @@ static size_t page_size = 0; IV PerlIOMmap_map(PerlIO *f) { + dTHX; PerlIOMmap *m = PerlIOSelf(f,PerlIOMmap); PerlIOBuf *b = &m->base; IV flags = PerlIOBase(f)->flags; @@ -1841,8 +1842,40 @@ PerlIOMmap_map(PerlIO *f) if (len > 0) { Off_t posn; - if (!page_size) + if (!page_size) { +#if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_PAGE_SIZE)) + { + SETERRNO(0,SS$_NORMAL); +# ifdef _SC_PAGESIZE + page_size = sysconf(_SC_PAGESIZE); +# else + page_size = sysconf(_SC_PAGE_SIZE); +# endif + if ((long)page_size < 0) { + if (errno) { + SV *error = ERRSV; + char *msg; + STRLEN n_a; + (void)SvUPGRADE(error, SVt_PV); + msg = SvPVx(error, n_a); + Perl_croak(aTHX_ "panic: sysconf: %s", msg); + } + else + Perl_croak(aTHX_ "panic: sysconf: pagesize unknown"); + } + } +#else +# ifdef HAS_GETPAGESIZE page_size = getpagesize(); +# else +# if defined(I_SYS_PARAM) && defined(PAGESIZE) + page_size = PAGESIZE; /* compiletime, bad */ +# endif +# endif +#endif + if ((IV)page_size <= 0) + Perl_croak(aTHX_ "panic: bad pagesize %"IVdf, (IV)page_size); + } if (b->posn < 0) { /* This is a hack - should never happen - open should have set it ! */ @@ -2281,7 +2314,7 @@ int PerlIO_getpos(PerlIO *f, Fpos_t *pos) { *pos = PerlIO_tell(f); - return 0; + return *pos == -1 ? -1 : 0; } #else #ifndef PERLIO_IS_STDIO @@ -2326,7 +2359,8 @@ PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap) if (strlen(s) >= (STRLEN)n) { dTHX; - PerlIO_puts(Perl_error_log,"panic: sprintf overflow - memory corrupted!\n"); + (void)PerlIO_puts(Perl_error_log, + "panic: sprintf overflow - memory corrupted!\n"); my_exit(1); } }