Re: [PATCH 05/11] Remove va_copy at MSVC because there are va_copy.
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Aug 17, 2009, 16:49 UTC
- Message-ID
- <alpine.DEB.1.00.0908171840450.4991@intel-tinevez-2-302>
- 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 <lznuaa@gmail.com>
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:
Show 15 quoted lines
> 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