bug-gnulib
[Top][All Lists]
Advanced

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

fbufmode, fseeko, fseterr: add support for Solaris/AMD64


From: Bruno Haible
Subject: fbufmode, fseeko, fseterr: add support for Solaris/AMD64
Date: Sun, 19 Aug 2007 11:41:43 +0200
User-agent: KMail/1.5.4

This has not been reported so far (Solaris/amd64 appears to be a rarely used
platform). But I believe that the AMD64 port of Solaris 10 has the same
problem as the SPARC64 port: the internals of the FILE structure are hidden.
This patch generalizes the support for SPARC64 to AMD64.

2007-08-19  Bruno Haible  <address@hidden>

        * lib/fbufmode.c (fbufmode): Add tentative support for Solaris/AMD64.
        * lib/fseeko.c (rpl_fseeko): Likewise.
        * lib/fseterr.c (fseterr): Likewise.

*** lib/fbufmode.c      9 Jun 2007 01:27:49 -0000       1.3
--- lib/fbufmode.c      19 Aug 2007 09:34:36 -0000
***************
*** 55,62 ****
    if (fp->_flag & _IOLBF)
      return _IOLBF;
  # endif
! # if defined __sun && defined __sparc && defined _LP64 /* Solaris/SPARC 
64-bit */
!   return ((unsigned int *) fp) [9] & (_IONBF | _IOFBF);
  # else
    if (fp->_flag & _IONBF)
      return _IONBF;
--- 55,69 ----
    if (fp->_flag & _IOLBF)
      return _IOLBF;
  # endif
! # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
! #  define fp_ ((struct { unsigned char *_ptr; \
!                        unsigned char *_base; \
!                        unsigned char *_end; \
!                        long _cnt; \
!                        int _file; \
!                        unsigned int _flag; \
!                      } *) fp)
!   return fp_->_flag & (_IONBF | _IOFBF);
  # else
    if (fp->_flag & _IONBF)
      return _IONBF;
*** lib/fseeko.c        9 Jun 2007 01:27:50 -0000       1.7
--- lib/fseeko.c        19 Aug 2007 09:34:36 -0000
***************
*** 71,81 ****
                    : 0)
        && fp_ub._base == NULL)
  #elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, 
mingw */
! # if defined __sun && defined __sparc && defined _LP64 /* Solaris/SPARC 
64-bit */
  #  define fp_ ((struct { unsigned char *_ptr; \
                         unsigned char *_base; \
                         unsigned char *_end; \
                         long _cnt; \
                       } *) fp)
    if (fp_->_ptr == fp_->_base
        && (fp_->_ptr == NULL || fp_->_cnt == 0))
--- 71,83 ----
                    : 0)
        && fp_ub._base == NULL)
  #elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, 
mingw */
! # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
  #  define fp_ ((struct { unsigned char *_ptr; \
                         unsigned char *_base; \
                         unsigned char *_end; \
                         long _cnt; \
+                        int _file; \
+                        unsigned int _flag; \
                       } *) fp)
    if (fp_->_ptr == fp_->_base
        && (fp_->_ptr == NULL || fp_->_cnt == 0))
*** lib/fseterr.c       9 Jun 2007 01:27:50 -0000       1.5
--- lib/fseterr.c       19 Aug 2007 09:34:36 -0000
***************
*** 33,40 ****
  #elif defined __sferror             /* FreeBSD, NetBSD, OpenBSD, MacOS X, 
Cygwin */
    fp->_flags |= __SERR;
  #elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, 
mingw */
! # if defined __sun && defined __sparc && defined _LP64 /* Solaris/SPARC 
64-bit */
!   ((unsigned int *) fp) [9] |= _IOERR;
  # else
    fp->_flag |= _IOERR;
  # endif
--- 33,47 ----
  #elif defined __sferror             /* FreeBSD, NetBSD, OpenBSD, MacOS X, 
Cygwin */
    fp->_flags |= __SERR;
  #elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, 
mingw */
! # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
! #  define fp_ ((struct { unsigned char *_ptr; \
!                        unsigned char *_base; \
!                        unsigned char *_end; \
!                        long _cnt; \
!                        int _file; \
!                        unsigned int _flag; \
!                      } *) fp)
!   fp_->_flag |= _IOERR;
  # else
    fp->_flag |= _IOERR;
  # endif





reply via email to

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