@@ -56,12 +56,12 @@ size_t HopperBuffer::write(void *src, size_t len) {
5656 return done_len;
5757}
5858
59- size_t HopperBuffer::write (HopperPipe *pipe) {
59+ size_t HopperBuffer::write (HopperPipe *pipe, bool *more ) {
6060 size_t max_len = max_write ();
6161 size_t done_len = 0 ;
6262
6363 size_t next_len = std::min ((m_buf.size () - m_edge), max_len);
64- size_t res = pipe->read_pipe (&m_buf[m_edge], next_len);
64+ size_t res = pipe->read_pipe (&m_buf[m_edge], next_len, more );
6565 if (res == (size_t )-1 )
6666 // -1 indicates read error
6767 return -1 ;
@@ -74,7 +74,7 @@ size_t HopperBuffer::write(HopperPipe *pipe) {
7474 return done_len;
7575
7676 next_len = max_len - next_len;
77- res = pipe->read_pipe (&m_buf[m_edge], next_len);
77+ res = pipe->read_pipe (&m_buf[m_edge], next_len, more );
7878 if (res == (size_t )-1 )
7979 return -1 ;
8080
@@ -106,13 +106,13 @@ size_t HopperBuffer::read(BufferMarker *m, void *dst, size_t len) {
106106 return done_len;
107107}
108108
109- size_t HopperBuffer::read (HopperPipe *pipe) {
109+ size_t HopperBuffer::read (HopperPipe *pipe, bool *more ) {
110110 BufferMarker *m = pipe->marker ();
111111 size_t max_len = max_read (m);
112112 size_t done_len = 0 ;
113113
114114 size_t next_len = std::min ((m_buf.size () - m->pos ()), max_len);
115- size_t res = pipe->write_pipe (&m_buf[m->pos ()], next_len);
115+ size_t res = pipe->write_pipe (&m_buf[m->pos ()], next_len, more );
116116 if (res == (size_t )-1 )
117117 return -1 ;
118118
@@ -122,7 +122,7 @@ size_t HopperBuffer::read(HopperPipe *pipe) {
122122 return done_len;
123123
124124 next_len = max_len - next_len;
125- res = pipe->write_pipe (&m_buf[m->pos ()], next_len);
125+ res = pipe->write_pipe (&m_buf[m->pos ()], next_len, more );
126126 if (res == (size_t )-1 )
127127 return -1 ;
128128
@@ -134,7 +134,7 @@ size_t HopperBuffer::read(HopperPipe *pipe) {
134134size_t HopperBuffer::max_write () {
135135 size_t cap = m_buf.size ();
136136 if (m_markers.empty ())
137- return cap;
137+ return std::max (( size_t ) 0 , cap - 1 ) ;
138138
139139 size_t min_dist = cap;
140140
@@ -148,7 +148,7 @@ size_t HopperBuffer::max_write() {
148148 min_dist = d;
149149 }
150150
151- return min_dist;
151+ return std::max (( size_t ) 0 , min_dist - 1 ) ;
152152}
153153
154154size_t HopperBuffer::max_read (BufferMarker *m) {
0 commit comments