This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libstdc++/8610: std::streamoff type is 32-bit in GCC 3.2whereas it was 64-bit in GCC 2.96


The following reply was made to PR libstdc++/8610; it has been noted by GNATS.

From: Andreas Jaeger <aj@suse.de>
To: paolo@gcc.gnu.org
Cc: davido@csse.uwa.edu.au, gcc-bugs@gcc.gnu.org,
	gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/8610: std::streamoff type  is 32-bit  in GCC 3.2
 whereas it was 64-bit in GCC 2.96
Date: Sat, 08 Feb 2003 22:28:03 +0100

 paolo@gcc.gnu.org writes:
 
 > Synopsis: std::streamoff type  is 32-bit  in GCC 3.2 whereas it was 64-bit in GCC 2.96
 >
 > Responsible-Changed-From-To: unassigned->aj
 > Responsible-Changed-By: paolo
 > Responsible-Changed-When: Sat Feb  8 20:31:56 2003
 > Responsible-Changed-Why:
 >     LFS expert.
 > State-Changed-From-To: open->analyzed
 > State-Changed-By: paolo
 > State-Changed-When: Sat Feb  8 20:31:56 2003
 > State-Changed-Why:
 >     Hi Andreas, could you please have a look at this PR?
 >     It's about large file support in Linux and, having browsed
 >     your page
 >       http://www.suse.de/~aj/linux_lfs.html
 >     I think you can answer it _much_ better than me!
 >     Thanks, Paolo.
 
 Paolo, I need some help here since I don't know the internals of
 libstc++.
 
 /opt/gcc/3.4-devel/include/c++/3.4/i686-pc-linux-gnu/bits/c++io.h
 (where does this file come from?) indeed defines:
 namespace std 
 {
 // for fpos.h
   typedef long          streamoff;
   typedef ptrdiff_t     streamsize; // Signed integral type
 
 And libstdc++/config/io/c_io_libio.h has:
 
 namespace std 
 {
 // from fpos.h
   typedef _IO_ssize_t   streamsize; // Signed integral type
   typedef _IO_ssize_t   wstreamsize;
 
 #if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
   typedef _IO_off64_t   streamoff;
   typedef _IO_fpos64_t  __c_streampos;
 #else
   typedef _IO_off_t     streamoff;
   typedef _IO_fpos_t    __c_streampos;
 #endif
 
 For Linux we should IO_IO_FILE_VERSION defined and set to 0x20001.
 But why is this not done?
 
 But the problem is even more subitle.  config/io/basic_file_stdio.cc
 uses fseek/ftell which use a long int and therefore - under 32-bit -
 allow only 2 GB. You should use fseeko/ftello or fsetpos/fgetpos.
 
 Paolo, does this help?  Or did I look at the wrong files?
 
 Andreas
 -- 
  Andreas Jaeger
   SuSE Labs aj@suse.de
    private aj@arthur.inka.de
     http://www.suse.de/~aj


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]