mirror of https://github.com/encounter/SDL.git
make sure SDL_vsnprintf() nul terminates if it is using _vsnprintf
The change makes sure that SDL_vsnprintf() nul terminates if it is using _vsnprintf() for the job. I made this patch for Watcom, whose _vsnprintf() doesn't guarantee nul termination. The preprocessor check can be extended to windows in general too, if required. Closes bug #3769.
This commit is contained in:
parent
c11ae93aed
commit
652d59fb3b
|
@ -1319,7 +1319,18 @@ SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_
|
|||
return retval;
|
||||
}
|
||||
|
||||
#ifdef HAVE_VSNPRINTF
|
||||
#if defined(HAVE_LIBC) && defined(__WATCOMC__)
|
||||
/* _vsnprintf() doesn't ensure nul termination */
|
||||
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
|
||||
{
|
||||
int retval;
|
||||
if (!fmt) fmt = "";
|
||||
retval = _vsnprintf(text, maxlen, fmt, ap);
|
||||
if (maxlen > 0) text[maxlen-1] = '\0';
|
||||
if (retval < 0) retval = (int) maxlen;
|
||||
return retval;
|
||||
}
|
||||
#elif defined(HAVE_VSNPRINTF)
|
||||
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
|
||||
{
|
||||
if (!fmt) {
|
||||
|
|
Loading…
Reference in New Issue