fixing two hiden bug in reactos, null termante the string right at end, code tested in vs, but it seam no affact on wine test mscvrt printf test. What hell is the snprintf function call to ??

svn path=/trunk/; revision=22081
This commit is contained in:
Magnus Olsen 2006-05-28 00:51:16 +00:00
parent f07bc589f6
commit 6999a6bc5c
2 changed files with 29 additions and 3 deletions

View file

@ -253,6 +253,8 @@ int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args)
number of chars for from string */
int qualifier; /* 'h', 'l', 'L', 'I' or 'w' for integer fields */
/* clear the string buffer with zero so we do not need NULL terment it at end */
str = buf;
end = buf + cnt - 1;
if (end < buf - 1) {
@ -501,8 +503,20 @@ int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args)
if (str <= end)
*str = '\0';
else if (cnt > 0)
{
/* don't write out a null byte if the buf size is zero */
*end = '\0';
//*end = '\0';
if (str-buf >=cnt )
{
*end = '\0';
}
else
{
end++;
*end = '\0';
}
}
return str-buf;
}

View file

@ -500,9 +500,21 @@ int _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list args)
}
if (str <= end)
*str = L'\0';
else if (cnt > 0)
else if (cnt > 0)
{
/* don't write out a null byte if the buf size is zero */
*end = L'\0';
//*end = '\0';
if (str-buf >=cnt )
{
*end = L'\0';
}
else
{
end++;
*end = L'\0';
}
}
return str-buf;
}