Mercurial > hg > octave-lyh > gnulib-hg
changeset 16344:ecfc57537d99
stdioext: Add tentative support for Plan9.
* lib/stdio-impl.h: Include <errno.h>.
* lib/fseterr.c (fseterr) [EPLAN9]: Add conditional code.
* lib/freadable.c (freadable): Likewise.
* lib/fwritable.c (fwritable): Likewise.
* lib/fbufmode.c (fbufmode): Likewise.
* lib/freading.c (freading): Likewise.
* lib/fwriting.c (fwriting): Likewise.
* lib/freadptr.c (freadptr): Likewise.
* lib/freadseek.c (freadptrinc): Likewise.
* lib/freadahead.c (freadahead): Likewise.
* lib/fpurge.c (fpurge): Likewise.
* lib/fseeko.c (rpl_fseeko): Likewise.
* m4/fpending.m4 (gl_PREREQ_FPENDING): Add a variant for Plan9.
Reported by Jens Staal <staal1978@gmail.com>.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Fri, 03 Feb 2012 22:58:33 +0100 |
parents | 3bec4206b1cc |
children | 7cf3cc0dcf46 |
files | ChangeLog lib/fbufmode.c lib/fpurge.c lib/freadable.c lib/freadahead.c lib/freading.c lib/freadptr.c lib/freadseek.c lib/fseeko.c lib/fseterr.c lib/fwritable.c lib/fwriting.c lib/stdio-impl.h m4/fpending.m4 |
diffstat | 14 files changed, 88 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2012-02-03 Bruno Haible <bruno@clisp.org> + + stdioext: Add tentative support for Plan9. + * lib/stdio-impl.h: Include <errno.h>. + * lib/fseterr.c (fseterr) [EPLAN9]: Add conditional code. + * lib/freadable.c (freadable): Likewise. + * lib/fwritable.c (fwritable): Likewise. + * lib/fbufmode.c (fbufmode): Likewise. + * lib/freading.c (freading): Likewise. + * lib/fwriting.c (fwriting): Likewise. + * lib/freadptr.c (freadptr): Likewise. + * lib/freadseek.c (freadptrinc): Likewise. + * lib/freadahead.c (freadahead): Likewise. + * lib/fpurge.c (fpurge): Likewise. + * lib/fseeko.c (rpl_fseeko): Likewise. + * m4/fpending.m4 (gl_PREREQ_FPENDING): Add a variant for Plan9. + Reported by Jens Staal <staal1978@gmail.com>. + 2012-02-02 Jim Meyering <meyering@redhat.com> file-has-acl: suppress a warning from gcc -Wsuggest-attribute=const
--- a/lib/fbufmode.c +++ b/lib/fbufmode.c @@ -79,6 +79,12 @@ if (fp->__linebuf) return _IOLBF; return (fp->__bufsize > 0 ? _IOFBF : _IONBF); +#elif defined EPLAN9 /* Plan9 */ + if (fp->flags & 2 /* LINEBUF */) + return _IOLBF; + if (fp->bufl) + return _IOFBF; + return _IONBF; #else # error "Please port gnulib fbufmode.c to your platform! Look at the setvbuf implementation." #endif
--- a/lib/fpurge.c +++ b/lib/fpurge.c @@ -134,6 +134,9 @@ /* Nothing in the buffer, next putc is nontrivial. */ fp->__put_limit = fp->__buffer; return 0; +# elif defined EPLAN9 /* Plan9 */ + fp->rp = fp->wp = fp->lp = fp->buf; + return 0; # else # error "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib." # endif
--- a/lib/freadable.c +++ b/lib/freadable.c @@ -21,6 +21,10 @@ #include "stdio-impl.h" +#if defined EPLAN9 /* Plan9 */ +# include <fcntl.h> +#endif + bool freadable (FILE *fp) { @@ -41,6 +45,18 @@ return (fp->_Mode & 0x1 /* _MOPENR */) != 0; #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__mode.__read; +#elif defined EPLAN9 /* Plan9 */ + int fd = fp->fd; + if (fd >= 0) + { + int flags = fcntl (fd, F_GETFL, NULL); + if (flags >= 0) + { + flags &= O_ACCMODE; + return (flags == O_RDONLY || flags == O_RDWR); + } + } + return 0; #else # error "Please port gnulib freadable.c to your platform! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif
--- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -80,6 +80,10 @@ return (fp->__pushed_back ? fp->__get_limit - fp->__pushback_bufp + 1 : fp->__get_limit - fp->__bufp); +#elif defined EPLAN9 /* Plan9 */ + if (fp->state == 4 /* WR */ || fp->rp >= fp->wp) + return 0; + return fp->wp - fp->rp; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ abort (); return 0;
--- a/lib/freading.c +++ b/lib/freading.c @@ -62,6 +62,10 @@ # else return (fp->__buffer < fp->__get_limit /*|| fp->__bufp == fp->__put_limit ??*/); # endif +# elif defined EPLAN9 /* Plan9 */ + if (fp->state == 0 /* CLOSED */ || fp->state == 4 /* WR */) + return 0; + return (fp->state == 3 /* RD */ && (fp->bufl == 0 || fp->rp < fp->wp)); # else # error "Please port gnulib freading.c to your platform!" # endif
--- a/lib/freadptr.c +++ b/lib/freadptr.c @@ -101,6 +101,13 @@ return NULL; *sizep = size; return fp->__bufp; +#elif defined EPLAN9 /* Plan9 */ + if (fp->state == 4 /* WR */) + return NULL; + if (fp->rp >= fp->wp) + return NULL; + *sizep = fp->wp - fp->rp; + return fp->rp; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ /* This implementation is correct on any ANSI C platform. It is just awfully slow. */
--- a/lib/freadseek.c +++ b/lib/freadseek.c @@ -58,6 +58,8 @@ fp->_Next += increment; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__bufp += increment; +#elif defined EPLAN9 /* Plan9 */ + fp->rp += increment; #elif defined SLOW_BUT_NO_HACKS /* users can define this */ #else #error "Please port gnulib freadseek.c to your platform! Look at the definition of getc, getc_unlocked on your system, then report this to bug-gnulib."
--- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -89,6 +89,9 @@ && fp->__get_limit == fp->__bufp && fp->__put_limit == fp->__bufp && !fp->__pushed_back) +#elif defined EPLAN9 /* Plan9 */ + if (fp->rp == fp->buf + && fp->wp == fp->buf) #else #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib." #endif
--- a/lib/fseterr.c +++ b/lib/fseterr.c @@ -45,6 +45,9 @@ fp->_Mode |= 0x200 /* _MERR */; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__error = 1; +#elif defined EPLAN9 /* Plan9 */ + if (fp->state != 0 /* CLOSED */) + fp->state = 5 /* ERR */; #elif 0 /* unknown */ /* Portable fallback, based on an idea by Rich Felker. Wow! 6 system calls for something that is just a bit operation!
--- a/lib/fwritable.c +++ b/lib/fwritable.c @@ -41,6 +41,18 @@ return (fp->_Mode & 0x2 /* _MOPENW */) != 0; #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__mode.__write; +#elif defined EPLAN9 /* Plan9 */ + int fd = fp->fd; + if (fd >= 0) + { + int flags = fcntl (fd, F_GETFL, NULL); + if (flags >= 0) + { + flags &= O_ACCMODE; + return (flags == O_WRONLY || flags == O_RDWR); + } + } + return 0; #else # error "Please port gnulib fwritable.c to your platform! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif
--- a/lib/fwriting.c +++ b/lib/fwriting.c @@ -52,6 +52,10 @@ # else return (fp->__buffer < fp->__put_limit /*|| fp->__bufp == fp->__get_limit ??*/); # endif +#elif defined EPLAN9 /* Plan9 */ + if (fp->state == 0 /* CLOSED */ || fp->state == 3 /* RD */) + return 0; + return (fp->state == 4 /* WR */ && (fp->bufl == 0 || fp->wp < fp->rp)); #else # error "Please port gnulib fwriting.c to your platform!" #endif
--- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -26,6 +26,8 @@ # include <sys/param.h> #endif +#include <errno.h> /* For detecting Plan9. */ + #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # if defined __DragonFly__ /* DragonFly */
--- a/m4/fpending.m4 +++ b/m4/fpending.m4 @@ -1,4 +1,4 @@ -# serial 18 +# serial 19 # Copyright (C) 2000-2001, 2004-2012 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -61,6 +61,9 @@ '# Minix' \ 'fp->_ptr - fp->_buf' \ \ + '# Plan9' \ + 'fp->wp - fp->buf' \ + \ '# VMS' \ '(*fp)->_ptr - (*fp)->_base' \ \