From 1a56c64d39a790bc69b58166f7b963334951e1a9 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Wed, 22 Dec 2010 17:37:34 +0100
Subject: [PATCH] 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 <jojo@schmitz-digital.de>.
---
 ChangeLog        | 19 +++++++++++++++++++
 lib/fbufmode.c   |  2 +-
 lib/fflush.c     |  2 +-
 lib/fpurge.c     |  2 +-
 lib/freadable.c  |  2 +-
 lib/freadahead.c |  2 +-
 lib/freading.c   |  2 +-
 lib/freadptr.c   |  2 +-
 lib/freadseek.c  |  2 +-
 lib/fseeko.c     |  4 ++--
 lib/fseterr.c    |  2 +-
 lib/fwritable.c  |  2 +-
 lib/fwriting.c   |  2 +-
 lib/stdio-impl.h | 11 +++++++++++
 14 files changed, 43 insertions(+), 13 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c2141ed0cc..e0e4e3afd3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2010-12-22  Bruno Haible  <bruno@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 <jojo@schmitz-digital.de>.
+
 2010-12-22  Bruno Haible  <bruno@clisp.org>
 
 	ttyname_r: Work around bug on OSF/1 5.1.
diff --git a/lib/fbufmode.c b/lib/fbufmode.c
index 42a305b59d..1ccf0c4f9d 100644
--- a/lib/fbufmode.c
+++ b/lib/fbufmode.c
@@ -50,7 +50,7 @@ fbufmode (FILE *fp)
   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;
diff --git a/lib/fflush.c b/lib/fflush.c
index ead4875498..a84a0a25f8 100644
--- a/lib/fflush.c
+++ b/lib/fflush.c
@@ -60,7 +60,7 @@ clear_ungetc_buffer (FILE *fp)
       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);
diff --git a/lib/fpurge.c b/lib/fpurge.c
index 079a2995ac..eaa6d2c53b 100644
--- a/lib/fpurge.c
+++ b/lib/fpurge.c
@@ -91,7 +91,7 @@ fpurge (FILE *fp)
   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;
diff --git a/lib/freadable.c b/lib/freadable.c
index 9464408ba6..1ab3e53f03 100644
--- a/lib/freadable.c
+++ b/lib/freadable.c
@@ -33,7 +33,7 @@ freadable (FILE *fp)
   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;
diff --git a/lib/freadahead.c b/lib/freadahead.c
index 50ff27ee20..09424b80c4 100644
--- a/lib/freadahead.c
+++ b/lib/freadahead.c
@@ -48,7 +48,7 @@ freadahead (FILE *fp)
   /* 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;
diff --git a/lib/freading.c b/lib/freading.c
index 202c3f76c3..4b8beeddab 100644
--- a/lib/freading.c
+++ b/lib/freading.c
@@ -39,7 +39,7 @@ freading (FILE *fp)
   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
diff --git a/lib/freadptr.c b/lib/freadptr.c
index 05f501bfeb..2fcdf81ccc 100644
--- a/lib/freadptr.c
+++ b/lib/freadptr.c
@@ -56,7 +56,7 @@ freadptr (FILE *fp, size_t *sizep)
     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;
diff --git a/lib/freadseek.c b/lib/freadseek.c
index 99af4370a1..11fad29997 100644
--- a/lib/freadseek.c
+++ b/lib/freadseek.c
@@ -42,7 +42,7 @@ freadptrinc (FILE *fp, size_t increment)
 #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 */
diff --git a/lib/fseeko.c b/lib/fseeko.c
index 1fd1266bfe..f5359683ec 100644
--- a/lib/fseeko.c
+++ b/lib/fseeko.c
@@ -69,7 +69,7 @@ fseeko (FILE *fp, off_t offset, int whence)
       && 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 @@ fseeko (FILE *fp, off_t offset, int whence)
       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;
diff --git a/lib/fseterr.c b/lib/fseterr.c
index b1a379ebba..f14d3c0470 100644
--- a/lib/fseterr.c
+++ b/lib/fseterr.c
@@ -35,7 +35,7 @@ fseterr (FILE *fp)
   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;
diff --git a/lib/fwritable.c b/lib/fwritable.c
index a3f8795807..5e2f4a6038 100644
--- a/lib/fwritable.c
+++ b/lib/fwritable.c
@@ -33,7 +33,7 @@ fwritable (FILE *fp)
   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;
diff --git a/lib/fwriting.c b/lib/fwriting.c
index 12cd25e23d..5322e9f3b8 100644
--- a/lib/fwriting.c
+++ b/lib/fwriting.c
@@ -33,7 +33,7 @@ fwriting (FILE *fp)
   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;
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
index 0e67f66ef6..9f5cdfeeb3 100644
--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -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 */
-- 
2.30.2