mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
make xen ocaml safe-strings compliant
Xen built with ocaml 4.06 gives errors such as
Error: This expression has type bytes but an expression was
expected of type string
as Byte and safe-strings which were introduced in 4.02 are the
default in 4.06.
This patch which is mostly by Richard W.M. Jones of Red Hat
from https://bugzilla.redhat.com/show_bug.cgi?id=1526703
fixes these issues.
v2: drop tools/ocaml/libs/xc/xenctrl.ml from the patch as the
affected code was removed by commit d933f1a53c
tools/ocaml: Drop coredump infrastructure
Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
Reviewed-by: Christian Lindig <christian.lindig@citrix.com>
[ wei: remove trailing whitespaces ]
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
1 parent
6b48066e22
commit
df1e4c6e7f
4 files changed
+24
-24
No files matched your search
@@ -84,7 +84,7 @@ let read_mmap back con s len =
|
||||
|
||||
let read con s len =
|
||||
match con.backend with
|
||||
| Fd backfd -> read_fd backfd con s len
|
||||
| Fd backfd -> read_fd backfd con (Bytes.of_string s) len
|
||||
| Xenmmap backmmap -> read_mmap backmmap con s len
|
||||
|
||||
let write_fd back con s len =
|
||||
@@ -98,7 +98,7 @@ let write_mmap back con s len =
|
||||
|
||||
let write con s len =
|
||||
match con.backend with
|
||||
| Fd backfd -> write_fd backfd con s len
|
||||
| Fd backfd -> write_fd backfd con (Bytes.of_string s) len
|
||||
| Xenmmap backmmap -> write_mmap backmmap con s len
|
||||
|
||||
(* NB: can throw Reconnect *)
|
||||
@@ -147,7 +147,7 @@ let input con =
|
||||
| NoHdr (i, buf) ->
|
||||
(* we complete the partial header *)
|
||||
if sz > 0 then
|
||||
String.blit s 0 buf (Partial.header_size () - i) sz;
|
||||
String.blit s 0 (Bytes.of_string buf) (Partial.header_size () - i) sz;
|
||||
con.partial_in <- if sz = i then
|
||||
HaveHdr (Partial.of_string buf) else NoHdr (i - sz, buf)
|
||||
);
|
||||
|
||||
@@ -60,11 +60,11 @@ type logger =
|
||||
let truncate_line nb_chars line =
|
||||
if String.length line > nb_chars - 1 then
|
||||
let len = max (nb_chars - 1) 2 in
|
||||
let dst_line = String.create len in
|
||||
String.blit line 0 dst_line 0 (len - 2);
|
||||
dst_line.[len-2] <- '.';
|
||||
dst_line.[len-1] <- '.';
|
||||
dst_line
|
||||
let dst_line = Bytes.create len in
|
||||
Bytes.blit_string line 0 dst_line 0 (len - 2);
|
||||
Bytes.set dst_line (len-2) '.';
|
||||
Bytes.set dst_line (len-1) '.';
|
||||
Bytes.to_string dst_line
|
||||
else line
|
||||
|
||||
let log_rotate ref_ch log_file log_nb_files =
|
||||
@@ -252,13 +252,13 @@ let string_of_access_type = function
|
||||
*)
|
||||
|
||||
let sanitize_data data =
|
||||
let data = String.copy data in
|
||||
for i = 0 to String.length data - 1
|
||||
let data = Bytes.copy data in
|
||||
for i = 0 to Bytes.length data - 1
|
||||
do
|
||||
if data.[i] = '\000' then
|
||||
data.[i] <- ' '
|
||||
if Bytes.get data i = '\000' then
|
||||
Bytes.set data i ' '
|
||||
done;
|
||||
String.escaped data
|
||||
String.escaped (Bytes.to_string data)
|
||||
|
||||
let activate_access_log = ref true
|
||||
let access_log_destination = ref (File (Paths.xen_log_dir ^ "/xenstored-access.log"))
|
||||
@@ -291,7 +291,7 @@ let access_logging ~con ~tid ?(data="") ~level access_type =
|
||||
let date = string_of_date() in
|
||||
let tid = string_of_tid ~con tid in
|
||||
let access_type = string_of_access_type access_type in
|
||||
let data = sanitize_data data in
|
||||
let data = sanitize_data (Bytes.of_string data) in
|
||||
let prefix = prefix !access_log_destination date in
|
||||
let msg = Printf.sprintf "%s %s %s %s" prefix tid access_type data in
|
||||
logger.write ~level msg)
|
||||
|
||||
@@ -122,7 +122,7 @@ let pidfile_write filename =
|
||||
let pid = Unix.getpid () in
|
||||
let buf = string_of_int pid ^ "\n" in
|
||||
let len = String.length buf in
|
||||
if Unix.write fd buf 0 len <> len
|
||||
if Unix.write fd (Bytes.of_string buf) 0 len <> len
|
||||
then failwith "pidfile_write failed";
|
||||
)
|
||||
(fun () -> Unix.close fd)
|
||||
|
||||
@@ -45,23 +45,23 @@ let get_hierarchy path =
|
||||
|
||||
let hexify s =
|
||||
let hexseq_of_char c = sprintf "%02x" (Char.code c) in
|
||||
let hs = String.create (String.length s * 2) in
|
||||
let hs = Bytes.create (String.length s * 2) in
|
||||
for i = 0 to String.length s - 1
|
||||
do
|
||||
let seq = hexseq_of_char s.[i] in
|
||||
hs.[i * 2] <- seq.[0];
|
||||
hs.[i * 2 + 1] <- seq.[1];
|
||||
Bytes.set hs (i * 2) seq.[0];
|
||||
Bytes.set hs (i * 2 + 1) seq.[1];
|
||||
done;
|
||||
hs
|
||||
Bytes.to_string hs
|
||||
|
||||
let unhexify hs =
|
||||
let char_of_hexseq seq0 seq1 = Char.chr (int_of_string (sprintf "0x%c%c" seq0 seq1)) in
|
||||
let s = String.create (String.length hs / 2) in
|
||||
for i = 0 to String.length s - 1
|
||||
let s = Bytes.create (String.length hs / 2) in
|
||||
for i = 0 to Bytes.length s - 1
|
||||
do
|
||||
s.[i] <- char_of_hexseq hs.[i * 2] hs.[i * 2 + 1]
|
||||
Bytes.set s i (char_of_hexseq hs.[i * 2] hs.[i * 2 + 1])
|
||||
done;
|
||||
s
|
||||
Bytes.to_string s
|
||||
|
||||
let trim_path path =
|
||||
try
|
||||
@@ -85,7 +85,7 @@ let create_unix_socket name =
|
||||
let read_file_single_integer filename =
|
||||
let fd = Unix.openfile filename [ Unix.O_RDONLY ] 0o640 in
|
||||
let buf = String.make 20 (char_of_int 0) in
|
||||
let sz = Unix.read fd buf 0 20 in
|
||||
let sz = Unix.read fd (Bytes.of_string buf) 0 20 in
|
||||
Unix.close fd;
|
||||
int_of_string (String.sub buf 0 sz)
|
||||
|
||||
|
||||