This is the mail archive of the
mailing list for the GCC project.
Re: libstdc++/8610: std::streamoff type is 32-bit in GCC 3.2whereas it was 64-bit in GCC 2.96
- From: Andreas Jaeger <aj at suse dot de>
- To: aj at gcc dot gnu dot org
- Cc: gcc-prs at gcc dot gnu dot org,
- Date: 8 Feb 2003 21:36:00 -0000
- Subject: Re: libstdc++/8610: std::streamoff type is 32-bit in GCC 3.2whereas it was 64-bit in GCC 2.96
- Reply-to: Andreas Jaeger <aj at suse dot de>
The following reply was made to PR libstdc++/8610; it has been noted by GNATS.
From: Andreas Jaeger <email@example.com>
Cc: firstname.lastname@example.org, email@example.com,
firstname.lastname@example.org, email@example.com, firstname.lastname@example.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
> 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
> LFS expert.
> State-Changed-From-To: open->analyzed
> State-Changed-By: paolo
> State-Changed-When: Sat Feb 8 20:31:56 2003
> Hi Andreas, could you please have a look at this PR?
> It's about large file support in Linux and, having browsed
> your page
> 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
(where does this file come from?) indeed defines:
// for fpos.h
typedef long streamoff;
typedef ptrdiff_t streamsize; // Signed integral type
And libstdc++/config/io/c_io_libio.h has:
// 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;
typedef _IO_off_t streamoff;
typedef _IO_fpos_t __c_streampos;
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?
SuSE Labs email@example.com