src/hotspot/share/utilities/ostream.cpp
changeset 49177 eebf559c9e0d
parent 48859 5a4d08efbad9
child 49360 886acec3b4c6
equal deleted inserted replaced
49176:f413e471a6ab 49177:eebf559c9e0d
    94     // trivial copy-through format string
    94     // trivial copy-through format string
    95     result = va_arg(ap, const char*);
    95     result = va_arg(ap, const char*);
    96     result_len = strlen(result);
    96     result_len = strlen(result);
    97     if (add_cr && result_len >= buflen)  result_len = buflen-1;  // truncate
    97     if (add_cr && result_len >= buflen)  result_len = buflen-1;  // truncate
    98   } else {
    98   } else {
    99     // Handle truncation:
    99     int written = os::vsnprintf(buffer, buflen, format, ap);
   100     // posix: upon truncation, vsnprintf returns number of bytes which
   100     assert(written >= 0, "vsnprintf encoding error");
   101     //   would have been written (excluding terminating zero) had the buffer
       
   102     //   been large enough
       
   103     // windows: upon truncation, vsnprintf returns -1
       
   104     const int written = vsnprintf(buffer, buflen, format, ap);
       
   105     result = buffer;
   101     result = buffer;
   106     if (written < (int) buflen && written >= 0) {
   102     if ((size_t)written < buflen) {
   107       result_len = written;
   103       result_len = written;
   108     } else {
   104     } else {
   109       DEBUG_ONLY(warning("increase O_BUFLEN in ostream.hpp -- output truncated");)
   105       DEBUG_ONLY(warning("increase O_BUFLEN in ostream.hpp -- output truncated");)
   110       result_len = buflen - 1;
   106       result_len = buflen - 1;
   111       buffer[result_len] = 0;
       
   112     }
   107     }
   113   }
   108   }
   114   if (add_cr) {
   109   if (add_cr) {
   115     if (result != buffer) {
   110     if (result != buffer) {
   116       memcpy(buffer, result, result_len);
   111       memcpy(buffer, result, result_len);