[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libcdio-devel] [Libcdio-help] Large file support and binary compati
Re: [Libcdio-devel] [Libcdio-help] Large file support and binary compatibility on 32 bit systems
Fri, 8 Jul 2011 21:44:02 -0400
On Thu, Jul 7, 2011 at 10:45 AM, Bastiaan Timmer <address@hidden>wrote:
> There is something mysterious here because the typeset for off_t does not
> come from libcdio but rather from from the system. On Ubuntu it seems it
> comes from <sys/types.h>.
> Well, the typedef comes from <sys/types.h> here as well, but what it is
> defined as is dependant on _FILE_OFFSET_BITS which does come from libcdio.
> Or at least I think it does, as it's set to 32 on my system, but after
> running 'configure', a config.h is generated (and included in all cdio
> sources) that has the line '#define _FILE_OFFSET_BITS 64' in it. That define
> is what breaks programs linking to the library on my system (and other
> systems with 32 bit off_t's by default). So, I thought (but I could be
> wrong), that maybe one should just never change the value of
> FILE_OFFSET_BITS from the system default. And only provide large file
> enabled functions through specialized functions (like [fl]seek64) on 32-bit
> So the fact that there is garbage in the upper 4 bytes on 32-bit systems
> feels to me like a design flaw.
> The upper 4 bytes of the off_t received by cdio_paranoia_seek are not
> exactly garbage though, they are simply the 4 bytes of the int parameter
> ('int whence'). So you could actually work around this problem by giving the
> off_t a value of 0, and setting the int whence to the frame you want to seek
> to. The garbage value that ends up in the int will always (?) fall through
> the switch (in paranoia.c line 2479) and behave like it was set to SEEK_CUR.
> Not a very nice solution though... ;)
> There now is. When libcdio installs it installs ...
> include/cdio/cdio_config.h and that has values that were set from its
> config.h. Previously I had installed a truncated version of config.h. I just
> made a change in git to store the entire config.h.
> But I have a little trepidation with this change, so it is an experiment
> and may change. The C preprocessor symbols are from a global namespace. That
> is the names there are not prefaced with say CDIO_. _FILE_OFFSET_BITS in
> particular is such a global namespace variable. So this means you may need
> to be careful with the order of includes because some other include may set
> _FILE_OFFSET_BITS and, at least on Ubuntu, <sys/types.h> uses the value of
> the #define.
> Great, I just checked out the code and it seems to work. But, indeed, it
> might be a good idea to rename the symbols somehow as it may cause trouble.
> I don't know how difficult that would be though.
It is not something I want to undertake. But if someone else is interested
in doing this, I welcome patches.
> Right. I'll put on the list of things to do to change cdio_paranoia_seek to
> use an int32_t rather than an off_t.
> Right, well that is awesome! That would completely solve my problem and
> make the rest of this message somewhat less important (for me)
The change to use int32_t instead of off_t is now in git. Let's see if that
solves the problem you were experiencing.
> but still...
> Anyway, thanks for the help en quick reply,
> Bas Timmer