hotspot/src/share/vm/utilities/ostream.cpp
changeset 768 d0bebc7eefc2
parent 349 94856a2bae83
child 781 e1baa9c8f16f
child 1383 3a216aa862b7
equal deleted inserted replaced
767:64fb1fd7186d 768:d0bebc7eefc2
   751   size_t len;
   751   size_t len;
   752   const char* str = do_vsnprintf(_buffer, _buflen, format, argptr, true, len);
   752   const char* str = do_vsnprintf(_buffer, _buflen, format, argptr, true, len);
   753   write(str, len);
   753   write(str, len);
   754 }
   754 }
   755 
   755 
   756 bufferedStream::bufferedStream(size_t initial_size) : outputStream() {
   756 bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() {
   757   buffer_length = initial_size;
   757   buffer_length = initial_size;
   758   buffer        = NEW_C_HEAP_ARRAY(char, buffer_length);
   758   buffer        = NEW_C_HEAP_ARRAY(char, buffer_length);
   759   buffer_pos    = 0;
   759   buffer_pos    = 0;
   760   buffer_fixed  = false;
   760   buffer_fixed  = false;
   761 }
   761   buffer_max    = bufmax;
   762 
   762 }
   763 bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size) : outputStream() {
   763 
       
   764 bufferedStream::bufferedStream(char* fixed_buffer, size_t fixed_buffer_size, size_t bufmax) : outputStream() {
   764   buffer_length = fixed_buffer_size;
   765   buffer_length = fixed_buffer_size;
   765   buffer        = fixed_buffer;
   766   buffer        = fixed_buffer;
   766   buffer_pos    = 0;
   767   buffer_pos    = 0;
   767   buffer_fixed  = true;
   768   buffer_fixed  = true;
       
   769   buffer_max    = bufmax;
   768 }
   770 }
   769 
   771 
   770 void bufferedStream::write(const char* s, size_t len) {
   772 void bufferedStream::write(const char* s, size_t len) {
       
   773 
       
   774   if(buffer_pos + len > buffer_max) {
       
   775     flush();
       
   776   }
       
   777 
   771   size_t end = buffer_pos + len;
   778   size_t end = buffer_pos + len;
   772   if (end >= buffer_length) {
   779   if (end >= buffer_length) {
   773     if (buffer_fixed) {
   780     if (buffer_fixed) {
   774       // if buffer cannot resize, silently truncate
   781       // if buffer cannot resize, silently truncate
   775       len = buffer_length - buffer_pos - 1;
   782       len = buffer_length - buffer_pos - 1;
   809 #include <netinet/in.h>
   816 #include <netinet/in.h>
   810 #include <arpa/inet.h>
   817 #include <arpa/inet.h>
   811 #endif
   818 #endif
   812 
   819 
   813 // Network access
   820 // Network access
   814 networkStream::networkStream() {
   821 networkStream::networkStream() : bufferedStream(1024*10, 1024*10) {
   815 
   822 
   816   _socket = -1;
   823   _socket = -1;
   817 
   824 
   818   hpi::initialize_socket_library();
   825   hpi::initialize_socket_library();
   819 
   826 
   829   return hpi::recv(_socket, buf, (int)len, 0);
   836   return hpi::recv(_socket, buf, (int)len, 0);
   830 }
   837 }
   831 
   838 
   832 void networkStream::flush() {
   839 void networkStream::flush() {
   833   if (size() != 0) {
   840   if (size() != 0) {
   834     hpi::send(_socket, (char *)base(), (int)size(), 0);
   841     int result = hpi::raw_send(_socket, (char *)base(), (int)size(), 0);
       
   842     assert(result != -1, "connection error");
       
   843     assert(result == (int)size(), "didn't send enough data");
   835   }
   844   }
   836   reset();
   845   reset();
   837 }
   846 }
   838 
   847 
   839 networkStream::~networkStream() {
   848 networkStream::~networkStream() {