summaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-07-17 05:29:40 +0200
committerHendrik Leppkes <h.leppkes@gmail.com>2019-07-18 09:38:10 +0200
commitab4795a085cd3deacb5e4bbaf527d66171361024 (patch)
tree2b8fd729b273da1c0592ff73bb0702cacca4f999 /libavformat
parent2d900d8fe0aaf9c984e024956eb537ecdfe2c949 (diff)
downloadffmpeg-streaming-ab4795a085cd3deacb5e4bbaf527d66171361024.zip
ffmpeg-streaming-ab4795a085cd3deacb5e4bbaf527d66171361024.tar.gz
matroskadec: Add sizes to forward declarations
Unknown-length elements end when an element not allowed in them, but allowed at a higher level is encountered. In order to check for this, c1abd95a added a pointer to every syntax level's parent to each EbmlSyntax. Given that the parent must of course also reference the child in order to be able to enter said child level, one needs to use forward declarations. These forward declarations constitute tentative definitions and tentative definitions with internal linkage (like our syntaxes) must not be an incomplete type. Yet they were an incomplete type and while GCC and Clang did not even warn about this (on default warning levels), it broke compilation with MSVC. Therefore this commit adds the sizes. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/matroskadec.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index b97189e..fb0356e 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -389,12 +389,16 @@ typedef struct MatroskaDemuxContext {
#define CHILD_OF(parent) { .def = { .n = parent } }
-static const EbmlSyntax ebml_syntax[], matroska_segment[], matroska_track_video_color[], matroska_track_video[],
- matroska_track[], matroska_track_encoding[], matroska_track_encodings[],
- matroska_track_combine_planes[], matroska_track_operation[], matroska_tracks[],
- matroska_attachments[], matroska_chapter_entry[], matroska_chapter[], matroska_chapters[],
- matroska_index_entry[], matroska_index[], matroska_tag[], matroska_tags[], matroska_seekhead[],
- matroska_blockadditions[], matroska_blockgroup[], matroska_cluster_parsing[];
+// The following forward declarations need their size because
+// a tentative definition with internal linkage must not be an
+// incomplete type (6.7.2 in C90, 6.9.2 in C99).
+// Removing the sizes breaks MSVC.
+static const EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_track_video_color[15], matroska_track_video[19],
+ matroska_track[27], matroska_track_encoding[6], matroska_track_encodings[2],
+ matroska_track_combine_planes[2], matroska_track_operation[2], matroska_tracks[2],
+ matroska_attachments[2], matroska_chapter_entry[9], matroska_chapter[6], matroska_chapters[2],
+ matroska_index_entry[3], matroska_index[2], matroska_tag[3], matroska_tags[2], matroska_seekhead[2],
+ matroska_blockadditions[2], matroska_blockgroup[8], matroska_cluster_parsing[8];
static const EbmlSyntax ebml_header[] = {
{ EBML_ID_EBMLREADVERSION, EBML_UINT, 0, offsetof(Ebml, version), { .u = EBML_VERSION } },
OpenPOWER on IntegriCloud