mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
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:
parent
f07bc589f6
commit
6999a6bc5c
2 changed files with 29 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue