Add support for QNX (untested).
authorBruno Haible <bruno@clisp.org>
Wed, 3 Oct 2007 20:16:40 +0000 (22:16 +0200)
committerBruno Haible <bruno@clisp.org>
Wed, 3 Oct 2007 20:16:40 +0000 (22:16 +0200)
ChangeLog
lib/fbufmode.c
lib/fpurge.c
lib/freadable.c
lib/freadahead.c
lib/freading.c
lib/fseeko.c
lib/fseterr.c
lib/fwritable.c
lib/fwriting.c

index df9af5e3765b302c5a63ab0c5e7cf229c4357eff..eb7de883b5103b4d780fd9b8fe32d747cea0aa61 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2007-10-03  Bruno Haible  <bruno@clisp.org>
+
+       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  <bruno@clisp.org>
             Jim Meyering  <jim@meyering.net>
             Eric Blake  <ebb9@byu.net>
index 1c66a53784cddf725896e5ff55f97d9299568e3e..ee6b20789b627e788972acefd46268ddd4bfad0f 100644 (file)
@@ -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
index eb18b76840d75f86e69eb44db072f7cef2664528..45d04f850fa1110b9a6042aa88b3a925a13dc694 100644 (file)
@@ -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
index 7af45d2abd4b2817a15d84ad50b45ae4522648e2..16df74343def61f24ee875d16b1a8446454f8eff 100644 (file)
@@ -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
 }
index 4d52f633aee0c3ab35bf0bf2837415bc596ddaa6..a94d455c4934ee1425516528865ecf2678fc821e 100644 (file)
@@ -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
index c5bdd6eee7393a1399cabba6bba14d09af013255..c85dfa8a7f672f5737081ee5916a8f8f93e176b8 100644 (file)
@@ -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
index 209ce9c69073ae247f383309e5161bbd66f3c0c7..48c833b8404ebf5e44f2168f9cff5a101b4aee64 100644 (file)
@@ -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
index d8ea1fbb299625570af7cbaff3b8ec16d0587e97..68ebd9ada7ed8ce872abc0d83af48153771d9c4f 100644 (file)
@@ -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!
index 2885deabecef953fadbc87e909e570fec207f6ad..f06d40b7091d42caf05e7b7e31f49ee988df437f 100644 (file)
@@ -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
 }
index 1f02db3f35bd88ce6caaf8d6e14ee10138c500ca..8b9fe1a0e291c1af8117b15c71abbf88c56b4630 100644 (file)
@@ -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