diff options
| author | Junio C Hamano <gitster@pobox.com> | 2008-07-02 21:57:52 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2008-07-02 21:57:52 -0700 |
| commit | bb1ab2db08f48add4236a5a9c08aa1a6aa4d5d48 (patch) | |
| tree | e9e85601f78f7cfaf47785db9fd65f426e79fadb /compat/snprintf.c | |
| parent | 7d3580d74c6d801419dd91416f9a81750b7d4e2c (diff) | |
| parent | 14086b0a13f5f5ac456cb9ae16a263f92908ae61 (diff) | |
| download | git-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.c | 19 |
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; |
