bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: QNX and stdio extension modules (was: Re: gnulib request)


From: Bruno Haible
Subject: Re: QNX and stdio extension modules (was: Re: gnulib request)
Date: Wed, 3 Oct 2007 22:30:39 +0200
User-agent: KMail/1.5.4

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  <address@hidden>

        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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]