aboutsummaryrefslogtreecommitdiff
path: root/compat/snprintf.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-07-02 21:57:52 -0700
committerJunio C Hamano <gitster@pobox.com>2008-07-02 21:57:52 -0700
commitbb1ab2db08f48add4236a5a9c08aa1a6aa4d5d48 (patch)
treee9e85601f78f7cfaf47785db9fd65f426e79fadb /compat/snprintf.c
parent7d3580d74c6d801419dd91416f9a81750b7d4e2c (diff)
parent14086b0a13f5f5ac456cb9ae16a263f92908ae61 (diff)
downloadgit-bb1ab2db08f48add4236a5a9c08aa1a6aa4d5d48.tar.xz
Merge branch 'j6t/mingw'
* j6t/mingw: (38 commits) compat/pread.c: Add a forward declaration to fix a warning Windows: Fix ntohl() related warnings about printf formatting Windows: TMP and TEMP environment variables specify a temporary directory. Windows: Make 'git help -a' work. Windows: Work around an oddity when a pipe with no reader is written to. Windows: Make the pager work. When installing, be prepared that template_dir may be relative. Windows: Use a relative default template_dir and ETC_GITCONFIG Windows: Compute the fallback for exec_path from the program invocation. Turn builtin_exec_path into a function. Windows: Use a customized struct stat that also has the st_blocks member. Windows: Add a custom implementation for utime(). Windows: Add a new lstat and fstat implementation based on Win32 API. Windows: Implement a custom spawnve(). Windows: Implement wrappers for gethostbyname(), socket(), and connect(). Windows: Work around incompatible sort and find. Windows: Implement asynchronous functions as threads. Windows: Disambiguate DOS style paths from SSH URLs. Windows: A rudimentary poll() emulation. Windows: Implement start_command(). ...
Diffstat (limited to 'compat/snprintf.c')
-rw-r--r--compat/snprintf.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/compat/snprintf.c b/compat/snprintf.c
index dbfc2d6b6e..580966e56a 100644
--- a/compat/snprintf.c
+++ b/compat/snprintf.c
@@ -1,12 +1,25 @@
#include "../git-compat-util.h"
+/*
+ * 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.
+ */
+#ifndef SNPRINTF_SIZE_CORR
+#define SNPRINTF_SIZE_CORR 0
+#endif
+
#undef vsnprintf
int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)
{
char *s;
- int ret;
+ int ret = -1;
- ret = vsnprintf(str, maxsize, format, ap);
+ if (maxsize > 0) {
+ ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
+ /* Windows does not NUL-terminate if result fills buffer */
+ str[maxsize-1] = 0;
+ }
if (ret != -1)
return ret;
@@ -20,7 +33,7 @@ int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)
if (! str)
break;
s = str;
- ret = vsnprintf(str, maxsize, format, ap);
+ ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
}
free(s);
return ret;