[libdvbpsi-devel] Use of -Werror (Was: Re: Nasty typecasting / alignment issues in libdvbpsi)

Jean-Paul Saman jpsaman at videolan.org
Thu Oct 18 09:54:17 CEST 2012


On Wed, Oct 17, 2012 at 10:43 PM, Martin Jackson
<mjackson220.list at gmail.com> wrote:
> Dear Jean-Paul,
>
> On Tue, Oct 16, 2012 at 11:03 AM, Jean-Paul Saman <jpsaman at videolan.org> wrote:
>> On Mon, Oct 15, 2012 at 12:30 PM, Martin Jackson
>> <mjackson220.list at gmail.com> wrote:
>>
>>> the libdvbpsi library appears not to compile without -Werror either
>>> for my mips toolchain or the regular centOS x86_64 toolchain, though I
>>> didn't have time to investigate.
>>
>> -Werror is forced in configure.ac
>>
>
> It seems that there was a bug introduced in renaming message ->
> dvbpsi_message in dvbpsi_private.h. This is masked (in my environment
> at least) by the configure script concluding that variadic macros are
> not supported (i.e. ac_cv_cpp_variadic_macros=no) if -Werror is
> included in the C flags, as the fragment in configure.ac used to
> determine this generates a warning and thus failure. I'm not sure how
> configure.ac should be fixed, as it's a combination of autoconf and
> the C flags used in libdvbpsi. However, the following patch should be
> applied to dvbpsi_private.h:
>
> diff --git a/src/dvbpsi_private.h b/src/dvbpsi_private.h
> index 800f712..b7d7bfd 100644
> --- a/src/dvbpsi_private.h
> +++ b/src/dvbpsi_private.h
> @@ -45,11 +45,11 @@ extern uint32_t dvbpsi_crc32_table[];
>  void dvbpsi_message(dvbpsi_t *dvbpsi, const int level, const char *fmt, ...);
>
>  #  define dvbpsi_error(hnd, src, str, x...)                             \
> -        message(hnd, DVBPSI_MSG_ERROR, "libdvbpsi error ("src"): " str, ##x)
> +        dvbpsi_message(hnd, DVBPSI_MSG_ERROR, "libdvbpsi error (%s):
> " str, src, ##x)
>  #  define dvbpsi_warning(hnd, src, str, x...)                                \
> -        message(hnd, DVBPSI_MSG_WARNING, "libdvbpsi warning ("src"):
> " str, ##x)
> +        dvbpsi_message(hnd, DVBPSI_MSG_WARNING, "libdvbpsi warning
> (%s): " str, src, ##x)
>  #  define dvbpsi_debug(hnd, src, str, x...)                                  \
> -        message(hnd, DVBPSI_MSG_DEBUG, "libdvbpsi debug ("src"): " str, ##x)
> +        dvbpsi_message(hnd, DVBPSI_MSG_DEBUG, "libdvbpsi debug (%s):
> " str, src, ##x)
>  #else
>  void dvbpsi_error(dvbpsi_t *dvbpsi, const char *src, const char *fmt, ...);
>  void dvbpsi_warning(dvbpsi_t *dvbpsi, const char *src, const char *fmt, ...);
>
>
>
> In addition, my compiler complains about some non-sensical byte
> overflow checks, which break my build (with -Werror enabled):
>
>
> diff --git a/src/descriptors/dr_40.c b/src/descriptors/dr_40.c
> index 7648339..d6cb9d1 100644
> --- a/src/descriptors/dr_40.c
> +++ b/src/descriptors/dr_40.c
> @@ -61,8 +61,7 @@ dvbpsi_network_name_dr_t* dvbpsi_DecodeNetworkNameDr(
>          return NULL;
>
>      /* Decode data */
> -    p_decoded->i_name_length = p_descriptor->i_length <= 255 ?
> -                               p_descriptor->i_length : 255;
> +    p_decoded->i_name_length = p_descriptor->i_length;
>      if (p_decoded->i_name_length)
>          memcpy(p_decoded->i_name_byte,
>                 p_descriptor->p_data,
> diff --git a/src/descriptors/dr_73.c b/src/descriptors/dr_73.c
> index 1e2299f..38bdd28 100644
> --- a/src/descriptors/dr_73.c
> +++ b/src/descriptors/dr_73.c
> @@ -58,9 +58,6 @@ dvbpsi_default_authority_dr_t
> *dvbpsi_DecodeDefaultAuthorityDr(dvbpsi_descriptor
>      if (!p_decoded)
>          return NULL;
>
> -    if (p_descriptor->i_length > 255)
> -        p_descriptor->i_length = 255;
> -
>      memcpy(&p_decoded->authority, p_descriptor->p_data,
> p_descriptor->i_length);
>      p_decoded->authority[p_descriptor->i_length] = 0;
>
> diff --git a/src/dvbpsi.c b/src/dvbpsi.c
> index f4fd5d8..ffbfaca 100644
> --- a/src/dvbpsi.c
> +++ b/src/dvbpsi.c
> @@ -216,7 +216,6 @@ void dvbpsi_decoder_reset(dvbpsi_decoder_t*
> p_decoder, const bool b_force)
>  bool dvbpsi_decoder_psi_sections_completed(dvbpsi_decoder_t* p_decoder)
>  {
>      assert(p_decoder);
> -    assert(p_decoder->i_last_section_number <= 255);
>
>      bool b_complete = false;
>
>
>
> Best regards,
>
> Martin Jackson
> _______________________________________________
> libdvbpsi-devel mailing list
> libdvbpsi-devel at videolan.org
> http://mailman.videolan.org/listinfo/libdvbpsi-devel

Both patches have been applied. Thank you for contirbuting.

Kind regards,

Jean-Paul Saman


More information about the libdvbpsi-devel mailing list