Bug#1098206: libid3-3.8.3-dev: Including id3.h fails in C23 mode due to bool typedef
Although...
bool is typedefed here:
> #ifndef __cplusplus
>
> typedef int bool;
> # define false (0)
> # define true (!false)
>
> #endif /* __cplusplus */
then we have:
> ID3_STRUCT(Mp3_Headerinfo)
> {
> Mpeg_Layers layer;
> Mpeg_Version version;
> MP3_BitRates bitrate;
> Mp3_ChannelMode channelmode;
> Mp3_ModeExt modeext;
> Mp3_Emphasis emphasis;
> Mp3_Crc crc;
> uint32 vbr_bitrate; // avg bitrate from xing header
> uint32 frequency; // samplerate
> uint32 framesize;
> uint32 frames; // nr of frames
> uint32 time; // nr of seconds in song
> bool privatebit;
> bool copyrighted;
> bool original;
> };
(+ other things using bool)
So switching to stdbool.h will break the ABI of this structure from C
(but not from C++) which is unfortunate. But I think it's already a bit
broken because id3 itself is compiled with C++. Maybe switching to
stdbool.h will unbreak it ???
There are also functions that return "bool". At least on x86_64 the top
bits of a bool are unspecified so false could be interpreted as true by
a C program. I guess it only works right now by luck!
James
Reply to: