[FFmpeg-devel] libavutil/thread.h: Fixed g++ build error when ASSERT_LEVEL is greater than 1
Clément Bœsch
u at pkh.me
Mon Apr 17 11:39:20 EEST 2017
On Sun, Apr 16, 2017 at 05:20:02PM -0700, Aaron Levinson wrote:
> From 9e6a9e2b8d58f17c661a3f455e03c95587ec7b18 Mon Sep 17 00:00:00 2001
> From: Aaron Levinson <alevinsn at aracnet.com>
> Date: Sun, 16 Apr 2017 17:13:31 -0700
> Subject: [PATCH] libavutil/thread.h: Fixed g++ build error when
> ASSERT_LEVEL is greater than 1
>
> Purpose: libavutil/thread.h: Fixed g++ build error when ASSERT_LEVEL
> is greater than 1. This is only relevant when thread.h is included by
> C++ files. In this case, the relevant code is only defined if
> HAVE_PTHREADS is defined as 1. Use configure --assert-level=2 to do
> so.
>
> Note: Issue discovered as a result of Coverity build failure. Cause
> of build failure pinpointed by Hendrik Leppkes.
>
> Comments:
>
> -- libavutil/thread.h: Altered ASSERT_PTHREAD_NORET definition such
> that it uses av_make_error_string instead of av_err2str().
> av_err2str() uses a "parenthesized type followed by an initializer
> list", which is apparently not valid C++. This issue started
> occurring because thread.h is now included by the DeckLink C++
> files. The alteration does the equivalent of what av_err2str()
> does, but instead declares the character buffer as a local
> variable.
> ---
> libavutil/thread.h | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/libavutil/thread.h b/libavutil/thread.h
> index 6e57447..f108e20 100644
> --- a/libavutil/thread.h
> +++ b/libavutil/thread.h
> @@ -36,8 +36,11 @@
> #define ASSERT_PTHREAD_NORET(func, ...) do { \
> int ret = func(__VA_ARGS__); \
> if (ret) { \
> + char errbuf[AV_ERROR_MAX_STRING_SIZE] = ""; \
> av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func) \
> - " failed with error: %s\n", av_err2str(AVERROR(ret))); \
> + " failed with error: %s\n", \
> + av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE, \
> + AVERROR(ret))); \
> abort(); \
> } \
> } while (0)
I don't like limiting ourselves in the common C code of the project
because C++ is a bad and limited language. Can't you solve this by bumping
the minimal requirement of C++ version?
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170417/a3ceef6c/attachment.sig>
More information about the ffmpeg-devel
mailing list