[Libguestfs] [PATCH] rpm: use librpm's rpmvercmp

Pino Toscano ptoscano at redhat.com
Mon Nov 24 14:52:26 UTC 2014


Bind and use rpmvercmp to compare versions of packages when sorting
them, instead of an own string-based comparison function.
---
 src/librpm-c.c | 12 ++++++++++++
 src/librpm.ml  |  1 +
 src/librpm.mli |  1 +
 src/rpm.ml     |  2 +-
 4 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/librpm-c.c b/src/librpm-c.c
index 1ae3bad..fc847d6 100644
--- a/src/librpm-c.c
+++ b/src/librpm-c.c
@@ -122,6 +122,12 @@ supermin_rpm_version (value unit)
 }
 
 value
+supermin_rpm_vercmp (value av, value bv)
+{
+  return Val_int (rpmvercmp (String_val (av), String_val (bv)));
+}
+
+value
 supermin_rpm_open (value debugv)
 {
   CAMLparam1 (debugv);
@@ -445,6 +451,12 @@ supermin_rpm_version (value unit)
 }
 
 value
+supermin_rpm_vercmp (value av, value bv)
+{
+  abort ();
+}
+
+value
 supermin_rpm_open (value debugv)
 {
   abort ();
diff --git a/src/librpm.ml b/src/librpm.ml
index aa8d367..8c30248 100644
--- a/src/librpm.ml
+++ b/src/librpm.ml
@@ -19,6 +19,7 @@
 external rpm_is_available : unit -> bool = "supermin_rpm_is_available"
 
 external rpm_version : unit -> string = "supermin_rpm_version"
+external rpm_vercmp : string -> string -> int = "supermin_rpm_vercmp"
 
 type t
 
diff --git a/src/librpm.mli b/src/librpm.mli
index 880a038..da73911 100644
--- a/src/librpm.mli
+++ b/src/librpm.mli
@@ -19,6 +19,7 @@
 val rpm_is_available : unit -> bool
 
 val rpm_version : unit -> string
+val rpm_vercmp : string -> string -> int
 
 type t
 
diff --git a/src/rpm.ml b/src/rpm.ml
index 640a02a..ce803e1 100644
--- a/src/rpm.ml
+++ b/src/rpm.ml
@@ -144,7 +144,7 @@ let rpm_package_of_string str =
      * architecture.
      *)
     let cmp { version = v1; arch = a1 } { version = v2; arch = a2 } =
-      let i = compare_version v2 v1 in
+      let i = rpm_vercmp v2 v1 in
       if i <> 0 then i
       else compare_architecture a2 a1
     in
-- 
1.9.3




More information about the Libguestfs mailing list