From 1561b0ad1f66f47d7911afd27881dc089c718cf1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 19 Aug 2007 09:37:45 +0000 Subject: [PATCH] Add tentative support for Solaris/AMD64. --- ChangeLog | 6 ++++++ lib/fbufmode.c | 11 +++++++++-- lib/fseeko.c | 4 +++- lib/fseterr.c | 11 +++++++++-- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index db9f1f9db1..6e1d8ea9b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-08-19 Bruno Haible + + * 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 * tests/test-lseek.c (main): Disable a test for BeOS. diff --git a/lib/fbufmode.c b/lib/fbufmode.c index 58c3bc247a..1c66a53784 100644 --- a/lib/fbufmode.c +++ b/lib/fbufmode.c @@ -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; diff --git a/lib/fseeko.c b/lib/fseeko.c index 1b51f88f1b..209ce9c690 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -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)) diff --git a/lib/fseterr.c b/lib/fseterr.c index d0137428b3..d8ea1fbb29 100644 --- a/lib/fseterr.c +++ b/lib/fseterr.c @@ -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 -- 2.30.2