mirror of
https://github.com/ocaml-multicore/eio.git
synced 2025-11-12 00:04:05 -05:00
Fix Buf_read.take_all
It was supposed to take everything in the stream, not just everything currently in the buffer!
This commit is contained in:
parent
e16bd3281a
commit
fb11d1fbf1
@ -128,6 +128,10 @@ let string s t =
|
||||
)
|
||||
|
||||
let take_all t =
|
||||
try
|
||||
while true do ensure t (t.len + 1) done;
|
||||
assert false
|
||||
with End_of_file ->
|
||||
let data = Cstruct.to_string (peek t) in
|
||||
consume t t.len;
|
||||
data
|
||||
|
||||
@ -530,7 +530,8 @@ module Buf_read : sig
|
||||
|
||||
val take_all : string parser
|
||||
(** [take_all] takes all remaining data until end-of-file.
|
||||
Returns [""] if already at end-of-file. *)
|
||||
Returns [""] if already at end-of-file.
|
||||
@raise Buffer_limit_exceeded if the remaining data exceeds the buffer limit *)
|
||||
|
||||
val take_while : (char -> bool) -> string parser
|
||||
(** [take_while p] finds the first byte for which [p] is false
|
||||
|
||||
@ -319,3 +319,31 @@ val i : R.t = <abstr>
|
||||
+mock_flow returning Eof
|
||||
- : string = "de"
|
||||
```
|
||||
|
||||
## Take all
|
||||
|
||||
```ocaml
|
||||
# let i = R.of_flow mock_flow ~max_size:100;;
|
||||
val i : R.t = <abstr>
|
||||
# next := ["20 text/gemini\r\n"; "# Introduction\n"; "# Conclusion\n"]; R.line i;;
|
||||
+mock_flow returning 16 bytes
|
||||
- : string = "20 text/gemini"
|
||||
# R.take_all i;;
|
||||
+mock_flow returning 15 bytes
|
||||
+mock_flow returning 13 bytes
|
||||
+mock_flow returning Eof
|
||||
- : string = "# Introduction\n# Conclusion\n"
|
||||
```
|
||||
|
||||
```ocaml
|
||||
# let i = R.of_flow mock_flow ~max_size:10;;
|
||||
val i : R.t = <abstr>
|
||||
# next := ["abc"; "def"; "ghi"; "jkl"]; R.take_all i;;
|
||||
+mock_flow returning 3 bytes
|
||||
+mock_flow returning 3 bytes
|
||||
+mock_flow returning 3 bytes
|
||||
+mock_flow returning 1 bytes
|
||||
Exception: Eio__Buf_read.Buffer_limit_exceeded.
|
||||
# R.take 3 i;;
|
||||
- : string = "abc"
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user