From e0cbd8d3ad576fda177792c4c3ad75a3823f61ee Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 3 Oct 2007 22:16:40 +0200 Subject: [PATCH] Add support for QNX (untested). --- ChangeLog | 13 +++++++++++++ lib/fbufmode.c | 6 ++++++ lib/fpurge.c | 9 +++++++++ lib/freadable.c | 4 +++- lib/freadahead.c | 5 +++++ lib/freading.c | 3 +++ lib/fseeko.c | 4 ++++ lib/fseterr.c | 2 ++ lib/fwritable.c | 4 +++- lib/fwriting.c | 3 +++ 10 files changed, 51 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index df9af5e37..eb7de883b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,17 @@ 2007-10-03 Bruno Haible + + Port the stdio extensions to QNX (untested). + * lib/fseterr.c (fseterr): Add support for QNX. + * lib/fbufmode.c (fbufmode): Likewise. + * lib/freadable.c (freadable): Likewise. + * lib/fwritable.c (fwritable): Likewise. + * lib/freading.c (freading): Likewise. + * lib/fwriting.c (fwriting): Likewise. + * lib/freadahead.c (freadahed): Likewise. + * lib/fpurge.c (fpurge): Likewise. + * lib/fseeko.c (rpl_fseeko): Likewise. + +2007-10-03 Bruno Haible Jim Meyering Eric Blake diff --git a/lib/fbufmode.c b/lib/fbufmode.c index 1c66a5378..ee6b20789 100644 --- a/lib/fbufmode.c +++ b/lib/fbufmode.c @@ -75,6 +75,12 @@ fbufmode (FILE *fp) if (fp->__modeflags & __FLAG_NBF) return _IONBF; return _IOFBF; +#elif defined __QNX__ /* QNX */ + if (fp->_Mode & _MLBF) + return _IOLBF; + if (fp->_Mode & _MNBF) + return _IONBF; + return _IOFBF; #else #error "Please port gnulib fbufmode.c to your platform! Look at the setvbuf implementation." #endif diff --git a/lib/fpurge.c b/lib/fpurge.c index eb18b7684..45d04f850 100644 --- a/lib/fpurge.c +++ b/lib/fpurge.c @@ -104,6 +104,15 @@ fpurge (FILE *fp) fp->__bufpos = fp->__bufread; # endif return 0; +# elif defined __QNX__ /* QNX */ + fp->_Rback = fp->_Back + sizeof (fp->_Back); + fp->_Rsave = NULL; + if (fp->_Mode & _MWRITE) + /* fp->_Buf <= fp->_Next <= fp->_Wend */ + fp->_Next = fp->_Buf; + else + /* fp->_Buf <= fp->_Next <= fp->_Rend */ + fp->_Rend = fp->_Next; # 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 diff --git a/lib/freadable.c b/lib/freadable.c index 7af45d2ab..16df74343 100644 --- a/lib/freadable.c +++ b/lib/freadable.c @@ -32,7 +32,9 @@ freadable (FILE *fp) return (fp->_flags & (__SRW | __SRD)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */ return (fp->_flag & (_IORW | _IOREAD)) != 0; +#elif defined __QNX__ /* QNX */ + return (fp->_Mode & _MOPENR) != 0; #else - #error "Please port gnulib freadable.c to your platform!" + #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 } diff --git a/lib/freadahead.c b/lib/freadahead.c index 4d52f633a..a94d455c4 100644 --- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -56,6 +56,11 @@ freadahead (FILE *fp) # else return 0; # endif +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & _MWRITE) != 0) + return 0; + /* fp->_Buf <= fp->_Next <= fp->_Rend */ + return fp->_Rend - fp->_Next; #else #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread on your system, then report this to bug-gnulib." #endif diff --git a/lib/freading.c b/lib/freading.c index c5bdd6eee..c85dfa8a7 100644 --- a/lib/freading.c +++ b/lib/freading.c @@ -40,6 +40,9 @@ freading (FILE *fp) return (fp->_flag & _IOREAD) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) != 0; +#elif defined __QNX__ /* QNX */ + return ((fp->_Mode & _MOPENW) == 0 + || (fp->_Mode & _MREAD) != 0); #else #error "Please port gnulib freading.c to your platform!" #endif diff --git a/lib/fseeko.c b/lib/fseeko.c index 209ce9c69..48c833b84 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -90,6 +90,10 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) || fp->__bufpos == fp->__bufstart) && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 || fp->__bufpos == fp->__bufread)) +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & _MWRITE ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) + && fp->_Rback == fp->_Back + sizeof (fp->_Back) + && fp->_Rsave == NULL) #else #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib." #endif diff --git a/lib/fseterr.c b/lib/fseterr.c index d8ea1fbb2..68ebd9ada 100644 --- a/lib/fseterr.c +++ b/lib/fseterr.c @@ -47,6 +47,8 @@ fseterr (FILE *fp) # endif #elif defined __UCLIBC__ /* uClibc */ fp->__modeflags |= __FLAG_ERROR; +#elif defined __QNX__ /* QNX */ + fp->_Mode |= _MERR; #elif 0 /* unknown */ /* Portable fallback, based on an idea by Rich Felker. Wow! 6 system calls for something that is just a bit operation! diff --git a/lib/fwritable.c b/lib/fwritable.c index 2885deabe..f06d40b70 100644 --- a/lib/fwritable.c +++ b/lib/fwritable.c @@ -32,7 +32,9 @@ fwritable (FILE *fp) return (fp->_flags & (__SRW | __SWR)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */ return (fp->_flag & (_IORW | _IOWRT)) != 0; +#elif defined __QNX__ /* QNX */ + return (fp->_mode & _MOPENW) != 0; #else - #error "Please port gnulib fwritable.c to your platform!" + #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 } diff --git a/lib/fwriting.c b/lib/fwriting.c index 1f02db3f3..8b9fe1a0e 100644 --- a/lib/fwriting.c +++ b/lib/fwriting.c @@ -34,6 +34,9 @@ fwriting (FILE *fp) return (fp->_flag & _IOWRT) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING) != 0; +#elif defined __QNX__ /* QNX */ + return ((fp->_Mode & _MOPENR) == 0 + || (fp->_Mode & _MWRITE) != 0); #else #error "Please port gnulib fwriting.c to your platform!" #endif -- 2.11.0