summaryrefslogtreecommitdiff
path: root/compat/snprintf.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2011-11-10 09:10:51 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2011-11-10 09:10:51 -0800
commitc444c16589f95ac22d8e3ffe603cd7f0613512ce (patch)
tree31d2e0c2a77344201af6f3ee5427f47218dec9bb /compat/snprintf.c
parentMerge 'build-in git-mktree' (diff)
parentMove 'builtin-*' into a 'builtin/' subdirectory (diff)
downloadtgif-c444c16589f95ac22d8e3ffe603cd7f0613512ce.tar.xz
Merge "Move 'builtin-*' into a 'builtin/' subdirectory"
Diffstat (limited to 'compat/snprintf.c')
-rw-r--r--compat/snprintf.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/compat/snprintf.c b/compat/snprintf.c
index 357e733074..e1e0e7543d 100644
--- a/compat/snprintf.c
+++ b/compat/snprintf.c
@@ -2,12 +2,19 @@
/*
* The size parameter specifies the available space, i.e. includes
- * the trailing NUL byte; but Windows's vsnprintf expects the
- * number of characters to write without the trailing NUL.
+ * the trailing NUL byte; but Windows's vsnprintf uses the entire
+ * buffer and avoids the trailing NUL, should the buffer be exactly
+ * big enough for the result. Defining SNPRINTF_SIZE_CORR to 1 will
+ * therefore remove 1 byte from the reported buffer size, so we
+ * always have room for a trailing NUL byte.
*/
#ifndef SNPRINTF_SIZE_CORR
+#if defined(WIN32) && (!defined(__GNUC__) || __GNUC__ < 4)
+#define SNPRINTF_SIZE_CORR 1
+#else
#define SNPRINTF_SIZE_CORR 0
#endif
+#endif
#undef vsnprintf
int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)