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 <[EMAIL PROTECTED]> * 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