comparison src/share/vm/utilities/ostream.cpp @ 222:2a1a77d3458f

6718676: putback for 6604014 is incomplete Reviewed-by: kvn, jrose
author never
date Tue, 24 Jun 2008 16:00:14 -0700
parents f96100ac3d12
children 9c2ecc2ffb12 fab5f738c515
comparison
equal deleted inserted replaced
221:1e026f8da827 222:2a1a77d3458f
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() {