xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] make xen ocaml safe-strings compliant
@ 2018-01-30 22:55 Michael Young
  2018-02-06 16:49 ` Wei Liu
  2018-02-08 17:49 ` Dario Faggioli
  0 siblings, 2 replies; 18+ messages in thread
From: Michael Young @ 2018-01-30 22:55 UTC (permalink / raw)
  To: xen-devel
  Cc: Marcello Seri, Wei Liu, Christian Lindig, John Thomson,
	David Scott

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 partly by Richard W.M. Jones of Red Hat
from https://bugzilla.redhat.com/show_bug.cgi?id=1526703
fixes these issues.

Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
Reviewed-by: Christian Lindig <christian.lindig@citrix.com>
---
  tools/ocaml/libs/xb/xb.ml        |  6 +++---
  tools/ocaml/libs/xc/xenctrl.ml   |  2 +-
  tools/ocaml/xenstored/logging.ml | 22 +++++++++++-----------
  tools/ocaml/xenstored/stdext.ml  |  2 +-
  tools/ocaml/xenstored/utils.ml   | 18 +++++++++---------
  5 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/tools/ocaml/libs/xb/xb.ml b/tools/ocaml/libs/xb/xb.ml
index 50944b5fd6..aa2cf98223 100644
--- a/tools/ocaml/libs/xb/xb.ml
+++ b/tools/ocaml/libs/xb/xb.ml
@@ -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)
  	);
diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml
index 9116aa222c..31b13f4bbd 100644
--- a/tools/ocaml/libs/xc/xenctrl.ml
+++ b/tools/ocaml/libs/xc/xenctrl.ml
@@ -292,7 +292,7 @@ external marshall_core_header: core_header -> string = "stub_marshall_core_heade
  (* coredump *)
  let coredump xch domid fd =
  	let dump s =
-		let wd = Unix.write fd s 0 (String.length s) in
+		let wd = Unix.write fd (Bytes.of_string s) 0 (String.length s) in
  		if wd <> String.length s then
  			failwith "error while writing";
  		in
diff --git a/tools/ocaml/xenstored/logging.ml b/tools/ocaml/xenstored/logging.ml
index 0c0d03d0c4..d24abf8a3a 100644
--- a/tools/ocaml/xenstored/logging.ml
+++ b/tools/ocaml/xenstored/logging.ml
@@ -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)
diff --git a/tools/ocaml/xenstored/stdext.ml b/tools/ocaml/xenstored/stdext.ml
index b8a8fd00e1..d05155c97e 100644
--- a/tools/ocaml/xenstored/stdext.ml
+++ b/tools/ocaml/xenstored/stdext.ml
@@ -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)
diff --git a/tools/ocaml/xenstored/utils.ml b/tools/ocaml/xenstored/utils.ml
index e89c1aff04..c96def7bee 100644
--- a/tools/ocaml/xenstored/utils.ml
+++ b/tools/ocaml/xenstored/utils.ml
@@ -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)

-- 
2.14.3

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-03-13 15:09 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-30 22:55 [PATCH 1/2] make xen ocaml safe-strings compliant Michael Young
2018-02-06 16:49 ` Wei Liu
2018-02-06 21:56   ` Michael Young
2018-02-07 10:31     ` Wei Liu
2018-02-08 17:49 ` Dario Faggioli
2018-02-08 18:03   ` Wei Liu
2018-02-08 18:24     ` Wei Liu
2018-02-09  9:20       ` Christian Lindig
2018-02-09 10:06         ` Dario Faggioli
2018-02-12 14:55         ` Wei Liu
2018-03-09 22:57           ` Michael Young
2018-03-09 23:47             ` Christian Lindig
2018-03-10  0:36               ` Michael Young
2018-03-12 11:29             ` Christian Lindig
2018-03-12 19:35               ` Michael Young
2018-03-13  9:29                 ` Christian Lindig
2018-03-13 14:49                   ` Wei Liu
2018-02-13  0:35         ` Michael Young

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).