mirror of https://github.com/aria2/aria2
Handle the case when MINGW32 vsnprintf returns -1
MINGW32 vsnprintf returns -1 if output is truncated. Increased buffer for vsnprintf in WinConsoleFile and fmt.pull/20/head
parent
96720b297d
commit
73b75186c7
|
@ -74,12 +74,16 @@ size_t WinConsoleFile::write(const char* str)
|
||||||
|
|
||||||
int WinConsoleFile::printf(const char* format, ...)
|
int WinConsoleFile::printf(const char* format, ...)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[2048];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
int r = vsnprintf(buf, sizeof(buf), format, ap);
|
int r = vsnprintf(buf, sizeof(buf), format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if(r <= 0) {
|
if(r == -1) {
|
||||||
|
// MINGW32 vsnprintf returns -1 if output is truncated.
|
||||||
|
r = strlen(buf);
|
||||||
|
} else if(r < 0) {
|
||||||
|
// Reachable?
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
DWORD written;
|
DWORD written;
|
||||||
|
|
14
src/fmt.cc
14
src/fmt.cc
|
@ -44,10 +44,20 @@ std::string fmt(const char* fmtTemplate, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmtTemplate);
|
va_start(ap, fmtTemplate);
|
||||||
char buf[1024];
|
char buf[2048];
|
||||||
if(vsnprintf(buf, sizeof(buf), fmtTemplate, ap) <= 0) {
|
int rv;
|
||||||
|
rv = vsnprintf(buf, sizeof(buf), fmtTemplate, ap);
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
// MINGW32 vsnprintf returns -1 if output is truncated.
|
||||||
|
if(rv < 0 && rv != -1) {
|
||||||
|
// Reachable?
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
}
|
}
|
||||||
|
#else // !__MINGW32__
|
||||||
|
if(rv < 0) {
|
||||||
|
buf[0] = '\0';
|
||||||
|
}
|
||||||
|
#endif // !__MINGW32__
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue