97 // trivial copy-through format string |
97 // trivial copy-through format string |
98 result = va_arg(ap, const char*); |
98 result = va_arg(ap, const char*); |
99 result_len = strlen(result); |
99 result_len = strlen(result); |
100 if (add_cr && result_len >= buflen) result_len = buflen-1; // truncate |
100 if (add_cr && result_len >= buflen) result_len = buflen-1; // truncate |
101 } else { |
101 } else { |
102 int written = os::vsnprintf(buffer, buflen, format, ap); |
102 int required_len = os::vsnprintf(buffer, buflen, format, ap); |
103 assert(written >= 0, "vsnprintf encoding error"); |
103 assert(required_len >= 0, "vsnprintf encoding error"); |
104 result = buffer; |
104 result = buffer; |
105 if ((size_t)written < buflen) { |
105 if ((size_t)required_len < buflen) { |
106 result_len = written; |
106 result_len = required_len; |
107 } else { |
107 } else { |
108 DEBUG_ONLY(warning("increase O_BUFLEN in ostream.hpp -- output truncated");) |
108 DEBUG_ONLY(warning("outputStream::do_vsnprintf output truncated -- buffer length is %d bytes but %d bytes are needed.", |
|
109 add_cr ? (int)buflen + 1 : (int)buflen, add_cr ? required_len + 2 : required_len + 1);) |
109 result_len = buflen - 1; |
110 result_len = buflen - 1; |
110 } |
111 } |
111 } |
112 } |
112 if (add_cr) { |
113 if (add_cr) { |
113 if (result != buffer) { |
114 if (result != buffer) { |