strftime should also return zero if the resulting string is truncated and/or not properly NUL terminated
This commit is contained in:
parent
2fac3de49e
commit
2e8b0d97e2
@ -136,9 +136,9 @@ static const char * const g_monthname[12] =
|
|||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* The strftime() function returns the number of characters placed in the
|
* The strftime() function returns the number of characters placed in the
|
||||||
* array s, not including the terminating null byte, provided the string,
|
* array s, not including the terminating null byte, provided the string,
|
||||||
* including the terminating null byte, fits. Otherwise, it returns 0,
|
* including the terminating null byte, fits. Otherwise, it returns 0,
|
||||||
* and the contents of the array is undefined.
|
* and the contents of the array is undefined.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
@ -394,12 +394,30 @@ size_t strftime(char *s, size_t max, const char *format, const struct tm *tm)
|
|||||||
chleft -= len;
|
chleft -= len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append terminating null byte (if there is space for it) */
|
/* We get here because either we have reached the end of the format string
|
||||||
|
* or because there is no more space in the user-provided buffer and the
|
||||||
|
* resulting string has been truncated.
|
||||||
|
*
|
||||||
|
* Is there space remaining in the user-provided buffer for the NUL
|
||||||
|
* terminator?
|
||||||
|
*/
|
||||||
|
|
||||||
if (chleft > 0)
|
if (chleft > 0)
|
||||||
{
|
{
|
||||||
|
/* Yes, append terminating NUL byte */
|
||||||
|
|
||||||
*dest = '\0';
|
*dest = '\0';
|
||||||
|
|
||||||
|
/* And return the number of bytes in the resulting string (excluding
|
||||||
|
* the NUL terminator).
|
||||||
|
*/
|
||||||
|
|
||||||
|
return max - chleft;
|
||||||
}
|
}
|
||||||
|
|
||||||
return max - chleft;
|
/* The string was truncated and/or not properly terminated. Return
|
||||||
|
* zero.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user