[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