diff options
author | Pierre Weis <Pierre.Weis@inria.fr> | 2006-01-03 18:27:32 +0000 |
---|---|---|
committer | Pierre Weis <Pierre.Weis@inria.fr> | 2006-01-03 18:27:32 +0000 |
commit | d154852500f1dbe0090d1089317767601d51850c (patch) | |
tree | 6431f31ba51cb652749575a56b68fbb6276b2e05 | |
parent | b970e68b6774b75b0477b9b00559271326d38aa0 (diff) |
Last correction for l, n, L numbers scanning.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@7299 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | stdlib/scanf.ml | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/stdlib/scanf.ml b/stdlib/scanf.ml index 5070e30ba..17e014219 100644 --- a/stdlib/scanf.ml +++ b/stdlib/scanf.ml @@ -961,14 +961,15 @@ let kscanf ib ef fmt f = | 'l' | 'n' | 'L' as conv -> let i = i + 1 in if i > lim then scan_fmt (stack f (get_count conv ib)) i else begin + let ty = conv in match fmt.[i] with | 'd' | 'i' | 'o' | 'u' | 'x' | 'X' as conv -> let _x = scan_int_conv conv max ib in - begin match conv with + begin match ty with | 'l' -> scan_fmt (stack f (token_int32 conv ib)) (i + 1) | 'n' -> scan_fmt (stack f (token_nativeint conv ib)) (i + 1) | _ -> scan_fmt (stack f (token_int64 conv ib)) (i + 1) end - | c -> scan_fmt (stack f (get_count conv ib)) i end + | _ -> scan_fmt (stack f (get_count conv ib)) i end | 'N' as conv -> scan_fmt (stack f (get_count conv ib)) (i + 1) | '!' -> @@ -1000,7 +1001,7 @@ let kscanf ib ef fmt f = let _x = scan_String max ib in let rf = token_string ib in if not (compatible_format_type mf rf) - then format_mismatch rf mf ib else + then format_mismatch rf mf ib else if conv = '{' then scan_fmt (stack f rf) j else let nf = scan_fmt (Obj.magic rf) 0 in scan_fmt (stack f nf) j @@ -1029,15 +1030,18 @@ let sscanf s = bscanf (Scanning.from_string s);; let scanf fmt = bscanf Scanning.stdib fmt;; -let bscanf_format ib fmt2 f = +let bscanf_format ib fmt f = + let fmt = format_to_string fmt in let fmt1 = ignore (scan_String max_int ib); token_string ib in - let fmt2 = format_to_string fmt2 in - if compatible_format_type fmt1 fmt2 - then let fresh_fmt = String.copy fmt1 in f (string_to_format fresh_fmt) - else format_mismatch fmt1 fmt2 ib;; + if not (compatible_format_type fmt1 fmt) then + format_mismatch fmt1 fmt ib else + let fresh_fmt1 = String.copy fmt1 in + f (string_to_format fresh_fmt1);; let sscanf_format s fmt = let fmt = format_to_string fmt in - if compatible_format_type s fmt - then let fresh_fmt = String.copy s in string_to_format fresh_fmt - else bad_input (format_mismatch_err s fmt);; + let fmt1 = s in + if not (compatible_format_type fmt1 fmt) then + bad_input (format_mismatch_err fmt1 fmt) else + let fresh_fmt1 = String.copy fmt1 in + string_to_format fresh_fmt1;; |