From: Johannes Schindelin Date: Mon, 17 Aug 2009 16:49:41 GMT Subject: Re: [PATCH 05/11] Remove va_copy at MSVC because there are va_copy. Message-ID: In-Reply-To: <1250525040-5868-1-git-send-email-lznuaa@gmail.com> Hi, On Tue, 18 Aug 2009, Frank Li wrote: > MSVs have not implemented va_copy. remove va_copy at MSVC environment. > It will malloc buffer each time. > > Signed-off-by: Frank Li How about this instead? Work around Microsoft Visual C++ not having va_copy() In winansi.c, Git wants to know the length of the formatted string so it can allocate enough space for it. But Microsoft Visual C++ does not have va_copy(), so we have to guess. The problem is the guessing part: > diff --git a/compat/winansi.c b/compat/winansi.c > index 9217c24..6091138 100644 > --- a/compat/winansi.c > +++ b/compat/winansi.c > @@ -310,9 +314,13 @@ static int winansi_vfprintf(FILE *stream, const char *format, va_list list) > if (!console) > goto abort; > > +#ifndef _MSC_VER > va_copy(cp, list); > len = vsnprintf(small_buf, sizeof(small_buf), format, cp); > va_end(cp); > +#else > + len= sizeof(small_buf) ; > +#endif small_buf only is 256 bytes. How do you want to make sure that the subsequent vsnprintf() is not writing outside of the buffer? Also, you still miss a space between "len" and "=". Ciao, Dscho