summaryrefslogtreecommitdiff
path: root/stdlib/bytes.ml
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2015-03-11 18:41:15 +0000
committerDamien Doligez <damien.doligez-inria.fr>2015-03-11 18:41:15 +0000
commite60a2db81c19bfa391107b921841c0abec30c458 (patch)
tree4dbd97cf7e30527c848a365c1fb6dd3bf4c63f71 /stdlib/bytes.ml
parent654521cbd41e93676375919fa35dfec0ea2647e0 (diff)
downloadocaml-e60a2db81c19bfa391107b921841c0abec30c458.tar.gz
PR#6521: {Bytes,Char,String}.escaped are locale-dependent
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@15901 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'stdlib/bytes.ml')
-rw-r--r--stdlib/bytes.ml25
1 files changed, 11 insertions, 14 deletions
diff --git a/stdlib/bytes.ml b/stdlib/bytes.ml
index 193c3ceea1..32d4468c34 100644
--- a/stdlib/bytes.ml
+++ b/stdlib/bytes.ml
@@ -122,7 +122,6 @@ let cat s1 s2 =
r
;;
-external is_printable: char -> bool = "caml_is_printable"
external char_code: char -> int = "%identity"
external char_chr: int -> char = "%identity"
@@ -151,7 +150,8 @@ let escaped s =
n := !n +
(match unsafe_get s i with
| '"' | '\\' | '\n' | '\t' | '\r' | '\b' -> 2
- | c -> if is_printable c then 1 else 4)
+ | ' ' .. '~' -> 1
+ | _ -> 4)
done;
if !n = length s then copy s else begin
let s' = create !n in
@@ -168,19 +168,16 @@ let escaped s =
unsafe_set s' !n '\\'; incr n; unsafe_set s' !n 'r'
| '\b' ->
unsafe_set s' !n '\\'; incr n; unsafe_set s' !n 'b'
+ | (' ' .. '~') as c -> unsafe_set s' !n c
| c ->
- if is_printable c then
- unsafe_set s' !n c
- else begin
- let a = char_code c in
- unsafe_set s' !n '\\';
- incr n;
- unsafe_set s' !n (char_chr (48 + a / 100));
- incr n;
- unsafe_set s' !n (char_chr (48 + (a / 10) mod 10));
- incr n;
- unsafe_set s' !n (char_chr (48 + a mod 10))
- end
+ let a = char_code c in
+ unsafe_set s' !n '\\';
+ incr n;
+ unsafe_set s' !n (char_chr (48 + a / 100));
+ incr n;
+ unsafe_set s' !n (char_chr (48 + (a / 10) mod 10));
+ incr n;
+ unsafe_set s' !n (char_chr (48 + a mod 10));
end;
incr n
done;