X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=compat%2Fsnprintf.c;h=6c0fb056a571b30627e404d7f164de31ed1a8699;hb=12d4ffaa94c1379c307cdf489565531c5d6c94fd;hp=580966e56a3455b9970b7eef33143c1e9c57d41c;hpb=10d9d887ecdc81197162d7bbe5dfc0d028498fd6;p=git.git diff --git a/compat/snprintf.c b/compat/snprintf.c index 580966e56..6c0fb056a 100644 --- a/compat/snprintf.c +++ b/compat/snprintf.c @@ -6,8 +6,12 @@ * number of characters to write without the trailing NUL. */ #ifndef SNPRINTF_SIZE_CORR +#if defined(__MINGW32__) && 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) @@ -17,6 +21,8 @@ int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap) if (maxsize > 0) { ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap); + if (ret == maxsize-1) + ret = -1; /* Windows does not NUL-terminate if result fills buffer */ str[maxsize-1] = 0; } @@ -34,6 +40,8 @@ int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap) break; s = str; ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap); + if (ret == maxsize-1) + ret = -1; } free(s); return ret;