diff options
Diffstat (limited to 'stdlib/scanf.ml')
-rw-r--r-- | stdlib/scanf.ml | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/stdlib/scanf.ml b/stdlib/scanf.ml index b479e9d5b..bb37064f8 100644 --- a/stdlib/scanf.ml +++ b/stdlib/scanf.ml @@ -475,9 +475,21 @@ let scan_String max ib = | '"', false (* '"' helping Emacs *) -> Scanning.next_char ib; max - 1 | '\\', false -> - Scanning.next_char ib; loop false (scan_backslash_char (max - 1) ib) + Scanning.next_char ib; + skip_spaces true (max - 1) + | c, false -> loop false (Scanning.store_char ib c max) + | c, _ -> bad_input_char c + and skip_spaces s max = + if max = 0 || Scanning.end_of_input ib then bad_input "a string" else + let c = Scanning.checked_peek_char ib in + match c, s with + | '\n', true -> + Scanning.next_char ib; + skip_spaces false (max - 1) + | ' ', false -> skip_spaces false (max - 1) + | '\\', false -> loop true max | c, false -> loop false (Scanning.store_char ib c max) - | c, _ -> bad_input_char c in + | _ -> loop false (scan_backslash_char (max - 1) ib) in loop true max;; let scan_bool max ib = |