[FFmpeg-devel] [PATCH] fix warning in libavutil/fifo.c

Måns Rullgård mans
Sun Feb 1 00:43:12 CET 2009


Michael Niedermayer <michaelni at gmx.at> writes:

> On Sun, Jan 25, 2009 at 03:58:48PM +0100, Diego Biurrun wrote:
>> On Tue, Jan 13, 2009 at 12:52:01PM -0800, Baptiste Coudurier wrote:
>> > 
>> > Michael Niedermayer wrote:
>> > > On Mon, Jan 12, 2009 at 10:33:12PM +0100, Diego Biurrun wrote:
>> > >> On Mon, Jan 12, 2009 at 09:13:58PM +0100, Michael Niedermayer wrote:
>> > >>> On Sun, Jan 11, 2009 at 10:17:18PM +0100, Diego Biurrun wrote:
>> > >>>> Here is a patch to fix
>> > >>>>
>> > >>>> fifo.c:79: warning: cast discards qualifiers from pointer target type
>> > >>>>
>> > >>>> --- libavutil/fifo.c	(revision 16549)
>> > >>>> +++ libavutil/fifo.c	(working copy)
>> > >>>> @@ -74,7 +74,7 @@
>> > >>>>  
>> > >>>> -void av_fifo_write(AVFifoBuffer *f, const uint8_t *buf, int size)
>> > >>>> +void av_fifo_write(AVFifoBuffer *f, uint8_t *buf, int size)
>> > >>> I belive av_fifo_write does not change the content of buf thus const
>> > >>> is correct
>> > >> Umm, I beg to differ. av_fifo_write is just a wrapper for
>> > >> av_fifo_generic_write, which does modify buf, hence the warning.
>> > > 
>> > > where does it modify the _CONTENT_OF_ buf?
>> > > 
>> > > It does not do this anywhere in the case where it is called through
>> > > av_fifo_write thus the const is correct.
>> > > av_fifo_write can be used with const arrays, if you remove the cont in the
>> > > parameter of av_fifo_write() you will have a warning for every use of
>> > > av_fifo_write() with a const argument, i doubt you prefer this ...
>> > 
>> > Would changing the prototype of 'func' to take const void * fix it ?
>> 
>> As in $attached?
>> 
>> Diego
>
>> Index: libavutil/fifo.c
>> ===================================================================
>> --- libavutil/fifo.c	(revision 16768)
>> +++ libavutil/fifo.c	(working copy)
>> @@ -76,10 +76,10 @@
>>  
>>  void av_fifo_write(AVFifoBuffer *f, const uint8_t *buf, int size)
>>  {
>> -    av_fifo_generic_write(f, (void *)buf, size, NULL);
>> +    av_fifo_generic_write(f, (const void *)buf, size, NULL);
>>  }
>>  
>> -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int))
>> +int av_fifo_generic_write(AVFifoBuffer *f, const void *src, int size, int (*func)(const void*, void*, int))
>
> this breaks the API and causes undefined behavior, src is not a const
> in av_fifo_generic_write(), it can be a struct that may contain a pointer
> for example that needs updating.
>
> To summarize this
> av_fifo_generic_write MUST NOT have a const src
> av_fifo_write SHOULD have a const src
> gcc prints a warning if you by whatever means change a const to a non
> const with the current flags.
>
> solutions are
> * close your eyes
> * change the flags
> * change gcc
> * filter the gcc output
>
> please dont change correct code due to incorrect warnings (or at least
> idiotic warnings)

av_fifo_write() is slated for removal, so is this really important?

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list