MinGW: Use our snprintf/vsnprintf when MinGW's is broken
All versions of MinGW-w64 prior to version 3, as well as all versions of MinGW32 have broken implementations of vsnprintf. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
parent
de73ae6b1a
commit
5ae9fa13f5
@ -27,6 +27,10 @@
|
|||||||
#include "compat/va_copy.h"
|
#include "compat/va_copy.h"
|
||||||
#include "libavutil/error.h"
|
#include "libavutil/error.h"
|
||||||
|
|
||||||
|
#if defined(__MINGW32__)
|
||||||
|
#define EOVERFLOW EFBIG
|
||||||
|
#endif
|
||||||
|
|
||||||
int avpriv_snprintf(char *s, size_t n, const char *fmt, ...)
|
int avpriv_snprintf(char *s, size_t n, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
38
compat/msvcrt/snprintf.h
Normal file
38
compat/msvcrt/snprintf.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* C99-compatible snprintf() and vsnprintf() implementations
|
||||||
|
* Copyright (c) 2012 Ronald S. Bultje <rsbultje@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);
|
||||||
|
|
||||||
|
#undef snprintf
|
||||||
|
#undef _snprintf
|
||||||
|
#undef vsnprintf
|
||||||
|
#define snprintf avpriv_snprintf
|
||||||
|
#define _snprintf avpriv_snprintf
|
||||||
|
#define vsnprintf avpriv_vsnprintf
|
||||||
|
|
||||||
|
#endif /* COMPAT_SNPRINTF_H */
|
8
configure
vendored
8
configure
vendored
@ -1265,6 +1265,7 @@ HAVE_LIST="
|
|||||||
asm_types_h
|
asm_types_h
|
||||||
attribute_may_alias
|
attribute_may_alias
|
||||||
attribute_packed
|
attribute_packed
|
||||||
|
broken_snprintf
|
||||||
cbrtf
|
cbrtf
|
||||||
clock_gettime
|
clock_gettime
|
||||||
closesocket
|
closesocket
|
||||||
@ -3194,10 +3195,17 @@ elif check_header _mingw.h; then
|
|||||||
"defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
|
"defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
|
||||||
(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
|
(__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
|
||||||
die "ERROR: MinGW runtime version must be >= 3.15."
|
die "ERROR: MinGW runtime version must be >= 3.15."
|
||||||
|
if check_cpp_condition _mingw.h \
|
||||||
|
"(defined(__MINGW32_MAJOR_VERSION) && !defined(__MINGW64_VERSION_MAJOR)) || \
|
||||||
|
__MINGW64_VERSION_MAJOR < 3"; then
|
||||||
|
enable broken_snprintf
|
||||||
|
add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
|
||||||
|
fi
|
||||||
elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
|
elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
|
||||||
libc_type=newlib
|
libc_type=newlib
|
||||||
elif check_func_headers stdlib.h _get_doserrno; then
|
elif check_func_headers stdlib.h _get_doserrno; then
|
||||||
libc_type=msvcrt
|
libc_type=msvcrt
|
||||||
|
enable broken_snprintf
|
||||||
add_cflags -Dstrtod=avpriv_strtod
|
add_cflags -Dstrtod=avpriv_strtod
|
||||||
add_cflags -Dsnprintf=avpriv_snprintf \
|
add_cflags -Dsnprintf=avpriv_snprintf \
|
||||||
-D_snprintf=avpriv_snprintf \
|
-D_snprintf=avpriv_snprintf \
|
||||||
|
@ -94,8 +94,9 @@ OBJS = adler32.o \
|
|||||||
utils.o \
|
utils.o \
|
||||||
xtea.o \
|
xtea.o \
|
||||||
|
|
||||||
OBJS-$(HAVE_MSVCRT) += ../compat/msvcrt/snprintf.o \
|
OBJS-$(HAVE_BROKEN_SNPRINTF) += ../compat/msvcrt/snprintf.o
|
||||||
../compat/strtod.o
|
|
||||||
|
OBJS-$(HAVE_MSVCRT) += ../compat/strtod.o
|
||||||
|
|
||||||
TESTPROGS = adler32 \
|
TESTPROGS = adler32 \
|
||||||
aes \
|
aes \
|
||||||
|
Loading…
Reference in New Issue
Block a user