summaryrefslogtreecommitdiff
path: root/src/fmt.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-06-24 16:56:34 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-06-24 16:56:34 +0900
commit73b75186c765fbf28f0479e920436afe3210f484 (patch)
treea061bd78519c0d172c4ba8b3670948c3c62d4a9c /src/fmt.cc
parent96720b297d50d290bda746fab75e0078ac5f975b (diff)
Handle the case when MINGW32 vsnprintf returns -1
MINGW32 vsnprintf returns -1 if output is truncated. Increased buffer for vsnprintf in WinConsoleFile and fmt.
Diffstat (limited to 'src/fmt.cc')
-rw-r--r--src/fmt.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/fmt.cc b/src/fmt.cc
index a4e97330..5eb0979b 100644
--- a/src/fmt.cc
+++ b/src/fmt.cc
@@ -44,10 +44,20 @@ std::string fmt(const char* fmtTemplate, ...)
{
va_list ap;
va_start(ap, fmtTemplate);
- char buf[1024];
- if(vsnprintf(buf, sizeof(buf), fmtTemplate, ap) <= 0) {
+ char buf[2048];
+ 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';
}
+#else // !__MINGW32__
+ if(rv < 0) {
+ buf[0] = '\0';
+ }
+#endif // !__MINGW32__
va_end(ap);
return buf;
}