From: Steven M. S. <sms@2BSD.COM> - 2003-11-22 06:41:05
|
Hi! Ran into a problem earlier tonight when I ran 'mpeg2dec' with an input file larger than 2GB. Got a "file too large error". I could see the problem also happening with the output file (say from -o pgmpipe). This was on a Suse 9.0 system. Had never gotten that error before and then it dawned on me that with linux large file support has to be explicitly requested. Looking around at how other programs handle the situation it seems there are between 1 and 3 flags that need to be either in CFLAGS or config.h: _FILE_OFFSET_BITS, _LARGEFILE_SOURCE, _LARGEFILE64_SOURCE which or all are needed I'm not sure. From another program's configure.in I see: if test x$OS_ARCH = xLinux ; then AC_MSG_CHECKING([whether glibc supports 64-bit file offsets]) AC_TRY_COMPILE( [ #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 #include <gnu/libc-version.h> #include <stdio.h> ], [ if(sizeof(__off_t) == 8 && sizeof(fpos_t) == 8) return 0; return 1; ], AC_DEFINE(_FILE_OFFSET_BITS,64, [Used by GNU C library to active large file support]) AC_DEFINE(_LARGEFILE_SOURCE,1, [Used by GNU C library to active large file support]) AC_DEFINE(_LARGEFILE64_SOURCE,1, [Used by GNU C library to active large file support]) fi Perhaps something like this could be added to mpeg2dec/libmpeg2's configuration? Cheers, Steven Schultz |
From: <mr...@kt...> - 2003-11-22 11:52:08
|
"Steven M. Schultz" <sms@2BSD.COM> writes: > From another program's configure.in I see: > > if test x$OS_ARCH = xLinux ; then > AC_MSG_CHECKING([whether glibc supports 64-bit file offsets]) > AC_TRY_COMPILE( > [ > #define _LARGEFILE_SOURCE > #define _LARGEFILE64_SOURCE > #define _FILE_OFFSET_BITS 64 > #include <gnu/libc-version.h> > #include <stdio.h> ], > [ > if(sizeof(__off_t) == 8 && sizeof(fpos_t) == 8) return 0; > return 1; > ], > AC_DEFINE(_FILE_OFFSET_BITS,64, > [Used by GNU C library to active large file support]) > AC_DEFINE(_LARGEFILE_SOURCE,1, > [Used by GNU C library to active large file support]) > AC_DEFINE(_LARGEFILE64_SOURCE,1, > [Used by GNU C library to active large file support]) > fi > > Perhaps something like this could be added to mpeg2dec/libmpeg2's > configuration? This isn't Linux specific. It might not work the same way on all systems, but defining those symbols will never hurt, so there's not really any need to test for anything in configure. -- Måns Rullgård mr...@kt... |
From: Steven M. S. <sms@2BSD.COM> - 2003-11-22 18:41:08
|
On Sat, 22 Nov 2003, [iso-8859-1] M=E5ns Rullg=E5rd wrote: > "Steven M. Schultz" <sms@2BSD.COM> writes: >=20 > > =09From another program's configure.in I see: > > > > if test x$OS_ARCH =3D xLinux ; then > > AC_MSG_CHECKING([whether glibc supports 64-bit file offsets]) > > AC_DEFINE(_FILE_OFFSET_BITS,64, > > [Used by GNU C library to active large file sup= port]) > > AC_DEFINE(_LARGEFILE_SOURCE,1, > > [Used by GNU C library to active large file sup= port]) > > AC_DEFINE(_LARGEFILE64_SOURCE,1, > > [Used by GNU C library to active large file sup= port]) > > fi >=20 > This isn't Linux specific. It might not work the same way on all > systems, but defining those symbols will never hurt, so there's not > really any need to test for anything in configure. =09In a sense it is indeed Linux specific - that's the only OS I run =09that clings to 32bit filesizes. The others (a couple BSD variants=20 =09and OS/X) have had 64bit filesizes by default for years. I don't =09have Solaris around so I do not know how it handles the large file =09issue (it was a mess years ago but may have improved since then). =09The thought was to avoid polluting the namespace by making an OS =09check. I'm not sure if all of the symbols are needed, it appears =09that over time Linux has used different methods of enabling 64bit =09support so the safest thing to do would be define all 3 of them. =09On the other hand, as you say, defining all of them would not hurt=20 =09anything ;) =09Cheers, =09Steven Schultz |
From: <mr...@kt...> - 2003-11-22 19:53:12
|
"Steven M. Schultz" <sms@2BSD.COM> writes: >> This isn't Linux specific. It might not work the same way on all >> systems, but defining those symbols will never hurt, so there's not >> really any need to test for anything in configure. > > In a sense it is indeed Linux specific - that's the only OS I run > that clings to 32bit filesizes. The others (a couple BSD variants > and OS/X) have had 64bit filesizes by default for years. I don't > have Solaris around so I do not know how it handles the large file > issue (it was a mess years ago but may have improved since then). Last I checked with Solaris, it wasn't very nice. The reason Linux uses 32 bits by default, is probably efficiency. On 64 bit hardware, nothing special needs to be done to use large files. > The thought was to avoid polluting the namespace by making an OS > check. I'm not sure if all of the symbols are needed, it appears > that over time Linux has used different methods of enabling 64bit > support so the safest thing to do would be define all 3 of them. > > On the other hand, as you say, defining all of them would not hurt > anything ;) AFAIK, none of them have ever been used for other purposes, and nobody in their right minds would be likely to do that. I'd go for setting them all. -- Måns Rullgård mr...@kt... |
From: Michel L. <wa...@zo...> - 2003-11-24 02:02:10
|
On Fri, Nov 21, 2003 at 10:37:11PM -0800, Steven M. Schultz wrote: > Ran into a problem earlier tonight when I ran 'mpeg2dec' with an > input file larger than 2GB. Got a "file too large error". I could > see the problem also happening with the output file (say from -o > pgmpipe). Huh - interesting. I had no idea I needed to enable 'large file support', even though I dont do any seek or use any functions that take off_t parameters anywhere. Anyway - I added AC_SYS_LARGEFILE in the configure script to take care of the issue. Please test it and report here wether it works or not. Cheers, -- Michel "Walken" Lespinasse "In this time of war against Osama bin Laden and the oppressive Taliban regime, we are thankful that OUR leader isn't the spoiled son of a powerful politician from a wealthy oil family who is supported by religious fundamentalists, operates through clandestine organizations, has no respect for the democratic electoral process, bombs innocents, and uses war to deny people their civil liberties." --The Boondocks |
From: Steven M. S. <sms@2BSD.COM> - 2003-11-24 02:17:17
|
On Sun, 23 Nov 2003, Michel Lespinasse wrote: > Huh - interesting. My reaction was a bit more colorful :) > I had no idea I needed to enable 'large file support', even though I > dont do any seek or use any functions that take off_t parameters anywhere. It was on the fopen() call that the error was being returned. Looking around in stdio.h and down I saw that the large file support redirects fopen to fopen64. > Anyway - I added AC_SYS_LARGEFILE in the configure script to take care > of the issue. Please test it and report here wether it works or not. Ok - I'll do that. Sourceforge seems backlogged again (at least for some projects I'm involved with) so it might be a day or so. Thanks for the fix! Steven Schultz |