Use C99 printf statements in mingw

Otherwise, format specifiers such as %llu will not work on XP or
earlier.
This bug was introduced with 51ed9ec9.
http://sourceforge.net/apps/trac/mingw-w64/wiki/gnu%20printf
This commit is contained in:
Wladimir J. van der Laan 2013-11-13 10:58:31 +01:00
parent b3e579713f
commit d6f690f7da
3 changed files with 9 additions and 26 deletions

View File

@ -221,7 +221,7 @@ case $host in
AC_MSG_ERROR("windres not found") AC_MSG_ERROR("windres not found")
fi fi
CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB" CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -D__USE_MINGW_ANSI_STDIO"
LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE" LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
CXXFLAGS="$CXXFLAGS -w" CXXFLAGS="$CXXFLAGS -w"
;; ;;

View File

@ -336,11 +336,7 @@ string vstrprintf(const char *format, va_list ap)
{ {
va_list arg_ptr; va_list arg_ptr;
va_copy(arg_ptr, ap); va_copy(arg_ptr, ap);
#ifdef WIN32
ret = _vsnprintf(p, limit, format, arg_ptr);
#else
ret = vsnprintf(p, limit, format, arg_ptr); ret = vsnprintf(p, limit, format, arg_ptr);
#endif
va_end(arg_ptr); va_end(arg_ptr);
if (ret >= 0 && ret < limit) if (ret >= 0 && ret < limit)
break; break;

View File

@ -44,26 +44,13 @@ static const int64_t CENT = 1000000;
#define UEND(a) ((unsigned char*)&((&(a))[1])) #define UEND(a) ((unsigned char*)&((&(a))[1]))
#define ARRAYLEN(array) (sizeof(array)/sizeof((array)[0])) #define ARRAYLEN(array) (sizeof(array)/sizeof((array)[0]))
/* Format characters for (s)size_t and ptrdiff_t */ /* Format characters for (s)size_t and ptrdiff_t (C99 standard) */
#if defined(_MSC_VER) || defined(__MSVCRT__) #define PRIszx "zx"
/* (s)size_t and ptrdiff_t have the same size specifier in MSVC: #define PRIszu "zu"
http://msdn.microsoft.com/en-us/library/tcxf1dw6%28v=vs.100%29.aspx #define PRIszd "zd"
*/ #define PRIpdx "tx"
#define PRIszx "Ix" #define PRIpdu "tu"
#define PRIszu "Iu" #define PRIpdd "td"
#define PRIszd "Id"
#define PRIpdx "Ix"
#define PRIpdu "Iu"
#define PRIpdd "Id"
#else /* C99 standard */
#define PRIszx "zx"
#define PRIszu "zu"
#define PRIszd "zd"
#define PRIpdx "tx"
#define PRIpdu "tu"
#define PRIpdd "td"
#endif
// This is needed because the foreach macro can't get over the comma in pair<t1, t2> // This is needed because the foreach macro can't get over the comma in pair<t1, t2>
#define PAIRTYPE(t1, t2) std::pair<t1, t2> #define PAIRTYPE(t1, t2) std::pair<t1, t2>
@ -117,7 +104,7 @@ inline void MilliSleep(int64_t n)
* Parameters count from 1. * Parameters count from 1.
*/ */
#ifdef __GNUC__ #ifdef __GNUC__
#define ATTR_WARN_PRINTF(X,Y) __attribute__((format(printf,X,Y))) #define ATTR_WARN_PRINTF(X,Y) __attribute__((format(gnu_printf,X,Y)))
#else #else
#define ATTR_WARN_PRINTF(X,Y) #define ATTR_WARN_PRINTF(X,Y)
#endif #endif