< prev index next >
src/share/vm/prims/jvm.cpp
Print this page
*** 2866,2876 ****
ATTRIBUTE_PRINTF(3, 0)
int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) {
// see bug 4399518, 4417214
if ((intptr_t)count <= 0) return -1;
! return vsnprintf(str, count, fmt, args);
}
ATTRIBUTE_PRINTF(3, 0)
int jio_snprintf(char *str, size_t count, const char *fmt, ...) {
va_list args;
--- 2866,2887 ----
ATTRIBUTE_PRINTF(3, 0)
int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) {
// see bug 4399518, 4417214
if ((intptr_t)count <= 0) return -1;
!
! int result = vsnprintf(str, count, fmt, args);
! // Note: on truncation vsnprintf(3) on Unix returns numbers of
! // characters which would have been written had the buffer been large
! // enough; on Windows, it returns -1. We handle both cases here and
! // always return -1, and perform null termination.
! if ((result > 0 && (size_t)result >= count) || result == -1) {
! str[count - 1] = '\0';
! result = -1;
! }
!
! return result;
}
ATTRIBUTE_PRINTF(3, 0)
int jio_snprintf(char *str, size_t count, const char *fmt, ...) {
va_list args;
< prev index next >