@@ -32,7 +32,8 @@ let make ?(bs=Bytes.create @@ 16 * 1024) ?(close=ignore) ~consume ~fill () : t =
3232 off= 0 ;
3333 len= 0 ;
3434 close= (fun () -> close self);
35- fill_buf= (fun () -> fill self);
35+ fill_buf= (fun () ->
36+ if self.len = 0 then fill self);
3637 consume=
3738 (fun n ->
3839 assert (n < = self.len);
@@ -46,7 +47,9 @@ let of_chan_ ?(buf_size=16 * 1024) ~close ic : t =
4647 make
4748 ~bs: (Bytes. create buf_size)
4849 ~close: (fun _ -> close ic)
49- ~consume: (fun buf n -> buf.off < - buf.off + n)
50+ ~consume: (fun self n ->
51+ self.off < - self.off + n;
52+ self.len < - self.len - n)
5053 ~fill: (fun self ->
5154 if self.off > = self.len then (
5255 self.off < - 0 ;
@@ -164,69 +167,71 @@ let read_line_into (self:t) ~buf : unit =
164167(* new stream with maximum size [max_size].
165168 @param close_rec if true, closing this will also close the input stream
166169 @param too_big called with read size if the max size is reached *)
167- let limit_size_to ~close_rec ~max_size ~too_big (self :t ) : t =
170+ let limit_size_to ~close_rec ~max_size ~too_big (arg :t ) : t =
168171 let size = ref 0 in
169172 let continue = ref true in
170173 make
171174 ~bs: Bytes. empty
172175 ~close: (fun _ ->
173- if close_rec then self .close () )
174- ~fill: (fun buf ->
175- if buf .len = 0 && ! continue then (
176- self .fill_buf() ;
177- buf .bs < - self .bs;
178- buf .off < - self .off;
179- buf .len < - self .len;
176+ if close_rec then arg .close () )
177+ ~fill: (fun res ->
178+ if res .len = 0 && ! continue then (
179+ arg .fill_buf() ;
180+ res .bs < - arg .bs;
181+ res .off < - arg .off;
182+ res .len < - arg .len;
180183 ) else (
181- self .bs < - Bytes. empty;
182- self .off < - 0 ;
183- self .len < - 0 ;
184+ arg .bs < - Bytes. empty;
185+ arg .off < - 0 ;
186+ arg .len < - 0 ;
184187 )
185188 )
186- ~consume: (fun buf n ->
189+ ~consume: (fun res n ->
187190 size := ! size + n;
188191 if ! size > max_size then (
189192 continue := false ;
190193 too_big ! size
191194 ) else (
192- self.consume n;
193- buf.len < - buf.len - n;
195+ arg.consume n;
196+ res.off < - res.off + n;
197+ res.len < - res.len - n;
194198 ))
195199 ()
196200
197201(* read exactly [size] bytes from the stream *)
198- let read_exactly ~close_rec ~size ~too_short (self :t ) : t =
202+ let read_exactly ~close_rec ~size ~too_short (arg :t ) : t =
199203 if size= 0 then (
200204 empty
201205 ) else (
202206 let size = ref size in
203207 make ~bs: Bytes. empty
204- ~fill: (fun buf ->
205- (* must not block on [self ] if we're done *)
208+ ~fill: (fun res ->
209+ (* must not block on [arg ] if we're done *)
206210 if ! size = 0 then (
207- buf .bs < - Bytes. empty;
208- buf .off < - 0 ;
209- buf .len < - 0 ;
211+ res .bs < - Bytes. empty;
212+ res .off < - 0 ;
213+ res .len < - 0 ;
210214 ) else (
211- self .fill_buf() ;
212- buf .bs < - self .bs;
213- buf .off < - self .off;
214- let len = min self .len ! size in
215+ arg .fill_buf() ;
216+ res .bs < - arg .bs;
217+ res .off < - arg .off;
218+ let len = min arg .len ! size in
215219 if len = 0 && ! size > 0 then (
216220 too_short ! size;
217221 );
218- buf .len < - len;
222+ res .len < - len;
219223 ))
220- ~close: (fun _buf ->
224+ ~close: (fun _res ->
221225 (* close underlying stream if [close_rec] *)
222- if close_rec then self .close() ;
226+ if close_rec then arg .close() ;
223227 size := 0
224228 )
225- ~consume: (fun buf n ->
229+ ~consume: (fun res n ->
226230 let n = min n ! size in
227231 size := ! size - n;
228- buf.len < - buf.len - n;
229- self.consume n
232+ arg.consume n;
233+ res.off < - res.off + n;
234+ res.len < - res.len - n;
230235 )
231236 ()
232237 )
@@ -263,7 +268,6 @@ let read_chunked ?(buf=Buf.create()) ~fail (bs:t) : t=
263268 if self.off > = self.len then (
264269 if ! chunk_size = 0 && ! refill then (
265270 chunk_size := read_next_chunk_len() ;
266- (* _debug (fun k->k"read next chunk of size %d" !chunk_size); *)
267271 );
268272 self.off < - 0 ;
269273 self.len < - 0 ;
@@ -280,7 +284,9 @@ let read_chunked ?(buf=Buf.create()) ~fail (bs:t) : t=
280284 )
281285 );
282286 )
283- ~consume: (fun self n -> self.off < - self.off + n)
287+ ~consume: (fun self n ->
288+ self.off < - self.off + n;
289+ self.len < - self.len - n)
284290 ~close: (fun self ->
285291 (* close this overlay, do not close underlying stream *)
286292 self.len < - 0 ;
0 commit comments