Here's the unfinished and untested port to QNX of the stdio extension modules. Since it's likely to be a better starting point for whomever volunteers to support that platform than no port at all, I'm committing it.
2007-10-03 Bruno Haible <[EMAIL PROTECTED]> 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. *** lib/fbufmode.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fbufmode.c 2007-10-03 01:57:58.000000000 +0200 *************** *** 75,80 **** --- 75,86 ---- 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 *** lib/fpurge.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fpurge.c 2007-10-03 03:00:36.000000000 +0200 *************** *** 104,109 **** --- 104,118 ---- 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 *** lib/freadable.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/freadable.c 2007-10-03 02:05:03.000000000 +0200 *************** *** 32,38 **** return (fp->_flags & (__SRW | __SRD)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */ return (fp->_flag & (_IORW | _IOREAD)) != 0; #else ! #error "Please port gnulib freadable.c to your platform!" #endif } --- 32,40 ---- 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! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif } *** lib/freadahead.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/freadahead.c 2007-10-03 02:57:27.000000000 +0200 *************** *** 56,61 **** --- 56,66 ---- # 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 *** lib/freading.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/freading.c 2007-10-03 02:19:37.000000000 +0200 *************** *** 40,45 **** --- 40,48 ---- 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 *** lib/fseeko.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fseeko.c 2007-10-03 03:02:38.000000000 +0200 *************** *** 90,95 **** --- 90,99 ---- || 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 *** lib/fseterr.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fseterr.c 2007-10-03 01:48:26.000000000 +0200 *************** *** 47,52 **** --- 47,54 ---- # 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! *** lib/fwritable.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fwritable.c 2007-10-03 02:05:10.000000000 +0200 *************** *** 32,38 **** return (fp->_flags & (__SRW | __SWR)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */ return (fp->_flag & (_IORW | _IOWRT)) != 0; #else ! #error "Please port gnulib fwritable.c to your platform!" #endif } --- 32,40 ---- 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! Look at the definition of fopen, fdopen on your system, then report this to bug-gnulib." #endif } *** lib/fwriting.c.orig 2007-10-03 21:35:27.000000000 +0200 --- lib/fwriting.c 2007-10-03 02:22:27.000000000 +0200 *************** *** 34,39 **** --- 34,42 ---- 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