Add tentative support for Solaris/AMD64.
authorBruno Haible <bruno@clisp.org>
Sun, 19 Aug 2007 09:37:45 +0000 (09:37 +0000)
committerBruno Haible <bruno@clisp.org>
Sun, 19 Aug 2007 09:37:45 +0000 (09:37 +0000)
ChangeLog
lib/fbufmode.c
lib/fseeko.c
lib/fseterr.c

index db9f1f9..6e1d8ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-08-19  Bruno Haible  <bruno@clisp.org>
 
+       * lib/fbufmode.c (fbufmode): Add tentative support for Solaris/AMD64.
+       * lib/fseeko.c (rpl_fseeko): Likewise.
+       * lib/fseterr.c (fseterr): Likewise.
+
+2007-08-19  Bruno Haible  <bruno@clisp.org>
+
        * tests/test-lseek.c (main): Disable a test for BeOS.
        * doc/functions/lseek.texi: Document the BeOS bug.
 
index 58c3bc2..1c66a53 100644 (file)
@@ -55,8 +55,15 @@ fbufmode (FILE *fp)
   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);
+# 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;
index 1b51f88..209ce9c 100644 (file)
@@ -71,11 +71,13 @@ rpl_fseeko (FILE *fp, off_t offset, int whence)
                    : 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 */
+# 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))
index d013742..d8ea1fb 100644 (file)
@@ -33,8 +33,15 @@ fseterr (FILE *fp)
 #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;
+# 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