[Flac-dev] 64-bit FLAC structure sizes and padding

Jerker Bäck
2011-05-30T06:43:44Z

Erik, thanks for the swift answer. Your right, I haven't seen any issues
yet. But it a thought stroke me when implementing edit capabilities of FLAC
vorbis comments. I've already implemented reading vorbis comments from FLAC
files in 64-bit and it works without any issues. This now leave me a bit
confused, since it should have issues(!).

Using the MS 64-bit compiler on Windows 7/2008R2 64-bit. Static libFLAC
compiled with compiler default 8 byte boundary alignment.

Now consider this:

typedef struct {
    FLAC__uint32 length;
    FLAC__byte *entry;
} FLAC__StreamMetadata_VorbisComment_Entry;

The compiler (with default settings) should interpret this as

typedef struct {
    FLAC__uint32 length;
    uint32_t __padding;
    FLAC__byte *entry;
} FLAC__StreamMetadata_VorbisComment_Entry;

Sizeof structure: 32-bit - 8 bytes, 64-bit - 16 bytes

How on earth does the compiler find entry correctly when reading (it does,
but how)?
What happens if I edit a vorbis comment/insert a new one when structure size
is doubled?

Am I missing something?