ffmpeg/fftools
Andreas Rheinhardt f2d522f2a8 fftools: Use right function signature and pointers
The option tables of the various fftools (in particular ffprobe) are
arrays of OptionDef; said type contains a union of a pointer to void and
a function pointer of type int (*)(void *, const char *, const char *)
as well as a size_t. Some entries (namely the common entry for writing a
report as well as several more of ffprobe's entries) used the pointer to
void to store a pointer to functions of type int (*)(const char *) or
type int (*)(const char *, const char *); nevertheless, when the functions
are actually called in write_option (in cmdutils.c), it is done via a
pointer of the first type.

There are two things wrong here:
1. Pointer to void can be converted to any pointer to incomplete or
object type and back; but they are nevertheless not completely generic
pointers: There is no provision in the C standard that guarantees their
convertibility with function pointers. C90 lacks a generic function
pointer, C99 made every function pointer a generic function pointer and
still disallows the convertibility with void *.
2. The signature of the called function differs from the signature
of the pointed-to type. This is undefined behaviour in C99 (given that
C90 lacks a way to convert function pointers at all, it doesn't say
anything about such a situation). It only works because none of the
functions this patch is about make any use of their parameters at all.

Therefore this commit changes the type of the relevant functions
to match the type used for the call and uses the union's function
pointer to store it. This is legal even in C90.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-08-15 01:26:21 +02:00
..
Makefile
cmdutils.c fftools: Use right function signature and pointers 2019-08-15 01:26:21 +02:00
cmdutils.h fftools: Use right function signature and pointers 2019-08-15 01:26:21 +02:00
ffmpeg.c libavformat: improve logs with cur_dts 2019-04-19 17:14:44 +02:00
ffmpeg.h ffmpeg_hw: Mark some strings as const 2019-06-02 22:58:22 +01:00
ffmpeg_cuvid.c
ffmpeg_filter.c
ffmpeg_hw.c ffmpeg_hw: Treat empty device string as no device setting 2019-06-02 22:58:22 +01:00
ffmpeg_opt.c ffmpeg_opt: Respect default disposition when select audio/video 2019-07-03 10:33:44 +08:00
ffmpeg_qsv.c
ffmpeg_videotoolbox.c
ffplay.c ffplay: properly detect all window size changes 2019-08-14 21:57:46 +02:00
ffprobe.c fftools: Use right function signature and pointers 2019-08-15 01:26:21 +02:00