[FFmpeg-devel] [PATCH] MinGW: Use our snprintf/vsnprintf when MinGW's is broken

jamal jamrial at gmail.com
Tue Sep 25 05:59:10 CEST 2012


On 24/09/12 8:03 PM, Derek Buitenhuis wrote:
> All versions of MinGW-w64 prior to version 3, have a broken
> implementation of vsnprintf.
> 
> Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> ---
>  compat/msvcrt/snprintf.c |    4 ++++
>  compat/msvcrt/snprintf.h |   38 ++++++++++++++++++++++++++++++++++++++
>  configure                |    7 +++++++
>  libavutil/Makefile       |    5 +++--
>  4 files changed, 52 insertions(+), 2 deletions(-)
>  create mode 100644 compat/msvcrt/snprintf.h
> 
> diff --git a/compat/msvcrt/snprintf.c b/compat/msvcrt/snprintf.c
> index 6787aad..c64653f 100644
> --- a/compat/msvcrt/snprintf.c
> +++ b/compat/msvcrt/snprintf.c
> @@ -27,6 +27,10 @@
>  #include "compat/va_copy.h"
>  #include "libavutil/error.h"
>  
> +#if defined(__MINGW32__)
> +#define EOVERFLOW EFBIG
> +#endif
> +
>  int avpriv_snprintf(char *s, size_t n, const char *fmt, ...)
>  {
>      va_list ap;
> diff --git a/compat/msvcrt/snprintf.h b/compat/msvcrt/snprintf.h
> new file mode 100644
> index 0000000..f02113c
> --- /dev/null
> +++ b/compat/msvcrt/snprintf.h
> @@ -0,0 +1,38 @@
> +/*
> + * C99-compatible snprintf() and vsnprintf() implementations
> + * Copyright (c) 2012 Ronald S. Bultje <rsbultje at gmail.com>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef COMPAT_SNPRINTF_H
> +#define COMPAT_SNPRINTF_H
> +
> +#include <stdarg.h>
> +#include <stdio.h>
> +
> +int avpriv_snprintf(char *s, size_t n, const char *fmt, ...);
> +int avpriv_vsnprintf(char *s, size_t n, const char *fmt, va_list ap);

Maybe add "av_printf_format(3, 4);" at the end of the avpriv_snprintf prototype declaration?

Aside from that, it's ok.


More information about the ffmpeg-devel mailing list