Plus two small helper functions.
---
common/mlutils/c_utils-c.c | 13 +++++++++++++
common/mlutils/c_utils.ml | 4 ++++
common/mlutils/c_utils.mli | 11 +++++++++++
3 files changed, 28 insertions(+)
diff --git a/common/mlutils/c_utils-c.c b/common/mlutils/c_utils-c.c
index 83cf76398..a25bf3d16 100644
--- a/common/mlutils/c_utils-c.c
+++ b/common/mlutils/c_utils-c.c
@@ -60,6 +60,19 @@ guestfs_int_mlutils_drive_index (value strv)
CAMLreturn (Val_int (r));
}
+value
+guestfs_int_mlutils_is_true (value strv)
+{
+ CAMLparam1 (strv);
+ ssize_t r;
+
+ r = guestfs_int_is_true (String_val (strv));
+ if (r == -1)
+ caml_invalid_argument ("is_true");
+
+ CAMLreturn (Val_bool (r));
+}
+
value
guestfs_int_mlutils_shell_unquote (value strv)
{
diff --git a/common/mlutils/c_utils.ml b/common/mlutils/c_utils.ml
index 0f9d1943d..33a1db313 100644
--- a/common/mlutils/c_utils.ml
+++ b/common/mlutils/c_utils.ml
@@ -23,6 +23,10 @@ open Printf
external drive_name : int -> string = "guestfs_int_mlutils_drive_name"
external drive_index : string -> int = "guestfs_int_mlutils_drive_index"
+external is_true : string -> bool = "guestfs_int_mlutils_is_true"
+let is_true_noraise s = try is_true s with Invalid_argument _ -> false
+let is_false_noraise s = try not (is_true s) with Invalid_argument _ -> false
+
external shell_unquote : string -> string =
"guestfs_int_mlutils_shell_unquote"
external is_reg : int64 -> bool = "guestfs_int_mlutils_is_reg"
"noalloc"
diff --git a/common/mlutils/c_utils.mli b/common/mlutils/c_utils.mli
index d2ad6fc1d..bb2f43017 100644
--- a/common/mlutils/c_utils.mli
+++ b/common/mlutils/c_utils.mli
@@ -21,6 +21,17 @@
val drive_name : int -> string
val drive_index : string -> int
+val is_true : string -> bool
+(** Converts strings like ["true"], ["yes"] etc into [true], and
+ strings like ["false"], ["no"] etc into [false]. Other strings
+ will raise [Invalid_argument "is_true"]. *)
+
+val is_true_noraise : string -> bool
+val is_false_noraise : string -> bool
+(** Wrappers around {!is_true} which do not raise an error. They
+ simply return a boolean indicating if the string is a true-like
+ or false-like string. *)
+
val shell_unquote : string -> string
(** If the string looks like a shell quoted string, then attempt to
unquote it.
--
2.19.0.rc0