Hello Joachim, > $ ./stdioext-flags > #define _IOERR 0x40 > #define _IOREAD 0x80 > #define _IOWRT 0x4 > #define _IORW 0x100 > #define _IORW 0x100 > > Very nice. > > Downloaded, unpacked, modified gllib/stdio-impl.h as per above, configured, > compiled, checked, all 33 tests passed!
Perfect! This was easier than I thought. I'm checking in the patch below. > I once tried, but failed, can you give me a full testdir with all gnulib > features to run and check? The one with all gnulib features is pretty big. A better next step is a testdir with only the POSIX replacements part of gnulib. I created one through $ ./gnulib-tool --create-testdir --dir=/tmp/testdir-posix \ --with-tests --with-c++-tests \ `./posix-modules` and uploaded it to http://www.haible.de/bruno/gnu/testdir-posix.tar.gz > So that we can get this 'strange' platform sorted once and forever? Well, the POSIX replacements part of gnulib is constantly growing: We tackle more and more functions, add more checks to the unit tests and find more platform bugs. So, if one platform passes all tests today, there may be again five test failures in 6 months. 2010-12-22 Bruno Haible <br...@clisp.org> Port extended stdio modules to HP NonStop Kernel. * lib/stdio-impl.h (_IOERR, _IOREAD, _IOWRT, _IORW) [__TANDEM]: New macros. * lib/fbufmode.c: Update comments. * lib/fflush.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. Reported by Joachim Schmitz <j...@schmitz-digital.de>. --- lib/stdio-impl.h.orig Wed Dec 22 17:33:17 2010 +++ lib/stdio-impl.h Wed Dec 22 17:32:54 2010 @@ -75,6 +75,17 @@ /* SystemV derived implementations. */ +#ifdef __TANDEM /* NonStop Kernel */ +# ifndef _IOERR +/* These values were determined by the program 'stdioext-flags' at + <http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00165.html>. */ +# define _IOERR 0x40 +# define _IOREAD 0x80 +# define _IOWRT 0x4 +# define _IORW 0x100 +# endif +#endif + #if defined _IOERR # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ --- lib/fbufmode.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fbufmode.c Wed Dec 22 12:44:24 2010 @@ -50,7 +50,7 @@ return _IOFBF; #elif defined __EMX__ /* emx+gcc */ return fp->_flags & (_IOLBF | _IONBF | _IOFBF); -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ # if HAVE___FLBF /* Solaris >= 7 */ if (__flbf (fp)) return _IOLBF; --- lib/fflush.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fflush.c Wed Dec 22 12:23:58 2010 @@ -60,7 +60,7 @@ fp->_ungetc_count = 0; fp->_rcount = - fp->_rcount; } -# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ /* Nothing to do. */ # else /* other implementations */ fseeko (fp, 0, SEEK_CUR); --- lib/fpurge.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fpurge.c Wed Dec 22 12:24:10 2010 @@ -91,7 +91,7 @@ fp->_wcount = 0; fp->_ungetc_count = 0; return 0; -# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ fp->_ptr = fp->_base; if (fp->_ptr != NULL) fp->_cnt = 0; --- lib/freadable.c.orig Wed Dec 22 17:33:16 2010 +++ lib/freadable.c Wed Dec 22 12:24:21 2010 @@ -33,7 +33,7 @@ return (fp_->_flags & (__SRW | __SRD)) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOREAD)) != 0; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ return (fp->_flag & (_IORW | _IOREAD)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x1 /* _MOPENR */) != 0; --- lib/freadahead.c.orig Wed Dec 22 17:33:16 2010 +++ lib/freadahead.c Wed Dec 22 12:24:36 2010 @@ -48,7 +48,7 @@ /* equivalent to (fp->_ungetc_count == 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount) */ return (fp->_rcount > 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount); -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ if ((fp_->_flag & _IOWRT) != 0) return 0; return fp_->_cnt; --- lib/freading.c.orig Wed Dec 22 17:33:16 2010 +++ lib/freading.c Wed Dec 22 12:24:45 2010 @@ -39,7 +39,7 @@ return (fp_->_flags & __SRD) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOREAD) != 0; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ # if defined __sun /* Solaris */ return (fp->_flag & _IOREAD) != 0 && (fp->_flag & _IOWRT) == 0; # else --- lib/freadptr.c.orig Wed Dec 22 17:33:16 2010 +++ lib/freadptr.c Wed Dec 22 12:24:55 2010 @@ -56,7 +56,7 @@ abort (); *sizep = fp->_rcount; return fp->_ptr; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ if ((fp_->_flag & _IOWRT) != 0) return NULL; size = fp_->_cnt; --- lib/freadseek.c.orig Wed Dec 22 17:33:16 2010 +++ lib/freadseek.c Wed Dec 22 12:25:04 2010 @@ -42,7 +42,7 @@ #elif defined __EMX__ /* emx+gcc */ fp->_ptr += increment; fp->_rcount -= increment; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ fp_->_ptr += increment; fp_->_cnt -= increment; #elif defined __UCLIBC__ /* uClibc */ --- lib/fseeko.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fseeko.c Wed Dec 22 12:25:24 2010 @@ -69,7 +69,7 @@ && fp->_rcount == 0 && fp->_wcount == 0 && fp->_ungetc_count == 0) -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ if (fp_->_ptr == fp_->_base && (fp_->_ptr == NULL || fp_->_cnt == 0)) #elif defined __UCLIBC__ /* uClibc */ @@ -131,7 +131,7 @@ fp_->_flags &= ~__SEOF; #elif defined __EMX__ /* emx+gcc */ fp->_flags &= ~_IOEOF; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ fp->_flag &= ~_IOEOF; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__offset = pos; --- lib/fseterr.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fseterr.c Wed Dec 22 12:18:20 2010 @@ -35,7 +35,7 @@ fp_->_flags |= __SERR; #elif defined __EMX__ /* emx+gcc */ fp->_flags |= _IOERR; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ fp_->_flag |= _IOERR; #elif defined __UCLIBC__ /* uClibc */ fp->__modeflags |= __FLAG_ERROR; --- lib/fwritable.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fwritable.c Wed Dec 22 12:25:41 2010 @@ -33,7 +33,7 @@ return (fp_->_flags & (__SRW | __SWR)) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOWRT)) != 0; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ return (fp->_flag & (_IORW | _IOWRT)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x2 /* _MOPENW */) != 0; --- lib/fwriting.c.orig Wed Dec 22 17:33:16 2010 +++ lib/fwriting.c Wed Dec 22 12:25:51 2010 @@ -33,7 +33,7 @@ return (fp_->_flags & __SWR) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOWRT) != 0; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ return (fp->_flag & _IOWRT) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING) != 0;