[FFmpeg-devel] bprint.h can't be included in C++ code
Nicolas George
george at nsup.org
Fri Nov 21 21:42:35 CET 2014
Le primidi 1er frimaire, an CCXXIII, Vadim Kalinsky a écrit :
> bprint.h can't be included in C++ code
> C++ does not support anonymous struct.
Thanks for the patch.
Basically, bprint.h is not meant to be included in c++ code.
> From a45cc83a807e7eabf158ddff52751171e80874f8 Mon Sep 17 00:00:00 2001
> From: Vadim Kalinsky <vkalinsky at Q.local>
> Date: Fri, 21 Nov 2014 13:39:07 -0500
> Subject: [PATCH] C++ compatible AVBPrint definition.
>
> ---
> libavutil/bprint.h | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/libavutil/bprint.h b/libavutil/bprint.h
> index d1682fc..10e96d7 100644
> --- a/libavutil/bprint.h
> +++ b/libavutil/bprint.h
> @@ -30,9 +30,12 @@
> * Define a structure with extra padding to a fixed size
> * This helps ensuring binary compatibility with future versions.
> */
> -#define FF_PAD_STRUCTURE(size, ...) \
> - __VA_ARGS__ \
> - char reserved_padding[size - sizeof(struct { __VA_ARGS__ })];
> +#define FF_PAD_STRUCTURE(name,size, ...) \
> +typedef struct __pad_structure_helper_##name { __VA_ARGS__ } __pad_structure_helper_##name; \
> +typedef struct name { \
> +__VA_ARGS__ \
> +char reserved_padding[size - sizeof(__pad_structure_helper_##name)]; \
> +} name;
Apart from the fact that it makes the macro hackery vastly less readable
(maybe some indentation would help), identifiers starting with a double
underscode are reserved for the implementation, and therefore can not be
used.
>
> /**
> * Buffer to print data progressively
> @@ -74,15 +77,14 @@
> * internal buffer is large enough to hold a reasonable paragraph of text,
> * such as the current paragraph.
> */
> -typedef struct AVBPrint {
> - FF_PAD_STRUCTURE(1024,
> +
> +FF_PAD_STRUCTURE(AVBPrint, 1024,
> char *str; /**< string so far */
> unsigned len; /**< length so far */
> unsigned size; /**< allocated memory */
> unsigned size_max; /**< maximum allocated memory */
> char reserved_internal_buffer[1];
> - )
> -} AVBPrint;
> +)
>
> /**
> * Convenience macros for special values for av_bprint_init() size_max
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141121/d4a84471/attachment.asc>
More information about the ffmpeg-devel
mailing list