On Sat, 9 Sep 2023, Tomas Härdin wrote:

fre 2023-09-08 klockan 22:38 +0200 skrev Marton Balint:

On Thu, 7 Sep 2023, Andreas Rheinhardt wrote:

> It is undefined behaviour even in cases where it works
> (it works because it is only a const uint8_t* vs. uint8_t*
> difference).
> > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com>
> ---
> libavformat/avio.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
> > diff --git a/libavformat/avio.c b/libavformat/avio.c
> index ab1c19a58d..d53da5cb0c 100644
> --- a/libavformat/avio.c
> +++ b/libavformat/avio.c
> @@ -354,10 +354,15 @@ fail:
> }
> > static inline int retry_transfer_wrapper(URLContext *h, uint8_t
> *buf,
> +                                         const uint8_t *cbuf,
>                                          int size, int size_min,
> -                                         int
> (*transfer_func)(URLContext *h,
> -                                                             
> uint8_t *buf,
> -                                                              int
> size))
> +                                         int
> (*read_func)(URLContext *h,
> +                                                          uint8_t
> *buf,
> +                                                          int
> size),
> +                                         int
> (*write_func)(URLContext *h,
> +                                                           const
> uint8_t *buf,
> +                                                           int
> size),
> +                                         int read)

These extra parameters are very ugly, can't we think of another way
to properly support this?
One idea is putting retry_transfer_wrapper in a template file and
include it twice with proper defines-s for the read and write flavours.
Seems like a lot of work for a function that's internal to avio.c
If future extensibility is not important here then function 
pointers should not be passed to retry_tranfer_wrapper because 
h->prot->url_read/write can be used directly. And usage of buf/cbuf is 
readundant with the read paramter, because by checking if buf or cbuf is 
null you can decide the operation (read of write).
Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to