diff options
author | Nick Ing-Simmons <nik@tiuk.ti.com> | 2000-11-05 10:10:13 +0000 |
---|---|---|
committer | Nick Ing-Simmons <nik@tiuk.ti.com> | 2000-11-05 10:10:13 +0000 |
commit | 313ca112ae76354c03e7aff0a3e35062e8173ef0 (patch) | |
tree | 83564b8f185ac9d7c4899f20da503f3f624a11d2 /perlio.c | |
parent | 15f50066a1fb35c138155dedebfa60ca1617ef38 (diff) | |
download | perl-313ca112ae76354c03e7aff0a3e35062e8173ef0.tar.gz |
Fix case where ungetc(f,EOF) was allowed.
Move PerlIO_ungetc() near PerlIO_putc()/PerlIO_getc() in the file
so we can see similarities.
Use types more carefully and a STDCHAR array in hope that this will
fix Jarrko's 64bit machine.
p4raw-id: //depot/perlio@7554
Diffstat (limited to 'perlio.c')
-rw-r--r-- | perlio.c | 36 |
1 files changed, 24 insertions, 12 deletions
@@ -372,7 +372,7 @@ PerlIO_default_layer(I32 n) av_push(PerlIO_layer_av,SvREFCNT_inc(layer)); } else - Perl_croak(aTHX_ "Unknown layer %.*s",(e-s),s); + Perl_warn(aTHX_ "Unknown layer %.*s",(e-s),s); s = e; } } @@ -513,14 +513,11 @@ PerlIO_read(PerlIO *f, void *vbuf, Size_t count) return (*PerlIOBase(f)->tab->Read)(f,vbuf,count); } -#undef PerlIO_ungetc -int -PerlIO_ungetc(PerlIO *f, int ch) +#undef PerlIO_unread +SSize_t +PerlIO_unread(PerlIO *f, const void *vbuf, Size_t count) { - STDCHAR buf = ch; - if ((*PerlIOBase(f)->tab->Unread)(f,&buf,1) == 1) - return ch; - return -1; + return (*PerlIOBase(f)->tab->Unread)(f,vbuf,count); } #undef PerlIO_write @@ -1776,11 +1773,26 @@ PerlIO_getname(PerlIO *f, char *buf) int PerlIO_getc(PerlIO *f) { - STDCHAR buf; - int count = PerlIO_read(f,&buf,1); + STDCHAR buf[1]; + SSize_t count = PerlIO_read(f,buf,1); if (count == 1) - return (unsigned char) buf; - return -1; + { + return (unsigned char) buf[0]; + } + return EOF; +} + +#undef PerlIO_ungetc +int +PerlIO_ungetc(PerlIO *f, int ch) +{ + if (ch != EOF) + { + STDCHAR buf = ch; + if (PerlIO_unread(f,&buf,1) == 1) + return ch; + } + return EOF; } #undef PerlIO_putc |