[Libguestfs] [supermin PATCH 3/5] rpm: query the RPM architecture

Pino Toscano ptoscano at redhat.com
Fri Apr 12 10:56:49 UTC 2019


Query the RPM library for the current architecture of RPM, storing it
for later use, and printing it to the debug output.
---
 src/librpm-c.c | 10 ++++++++++
 src/librpm.ml  |  1 +
 src/librpm.mli |  3 +++
 src/ph_rpm.ml  |  8 ++++++--
 4 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/librpm-c.c b/src/librpm-c.c
index 75ca4d7..2e2f048 100644
--- a/src/librpm-c.c
+++ b/src/librpm-c.c
@@ -132,6 +132,16 @@ supermin_rpm_vercmp (value av, value bv)
   return Val_int (rpmvercmp (String_val (av), String_val (bv)));
 }
 
+value
+supermin_rpm_get_arch (value unit)
+{
+  const char *str;
+
+  rpmGetArchInfo (&str, NULL);
+
+  return caml_copy_string (str);
+}
+
 value
 supermin_rpm_open (value debugv)
 {
diff --git a/src/librpm.ml b/src/librpm.ml
index b6f9ff8..c987e21 100644
--- a/src/librpm.ml
+++ b/src/librpm.ml
@@ -20,6 +20,7 @@ external rpm_is_available : unit -> bool = "supermin_rpm_is_available" "noalloc"
 
 external rpm_version : unit -> string = "supermin_rpm_version"
 external rpm_vercmp : string -> string -> int = "supermin_rpm_vercmp" "noalloc"
+external rpm_get_arch : unit -> string = "supermin_rpm_get_arch"
 
 type t
 
diff --git a/src/librpm.mli b/src/librpm.mli
index 53b4b2c..c0d7bdf 100644
--- a/src/librpm.mli
+++ b/src/librpm.mli
@@ -28,6 +28,9 @@ val rpm_version : unit -> string
 val rpm_vercmp : string -> string -> int
 (** Compare two RPM version strings using RPM version compare rules. *)
 
+val rpm_get_arch : unit -> string
+(** The current main RPM architecture. *)
+
 type t
 (** The librpm handle. *)
 
diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml
index a8bcf7c..e27d226 100644
--- a/src/ph_rpm.ml
+++ b/src/ph_rpm.ml
@@ -64,7 +64,7 @@ let ibm_powerkvm_detect () =
     with Unix_error _ -> false
 
 let settings = ref no_settings
-let rpm_major, rpm_minor = ref 0, ref 0
+let rpm_major, rpm_minor, rpm_arch = ref 0, ref 0, ref ""
 let zypper_major, zypper_minor, zypper_patch = ref 0, ref 0, ref 0
 let t = ref None
 
@@ -93,7 +93,11 @@ let rec rpm_init s =
   if !settings.debug >= 1 then
     printf "supermin: rpm: detected RPM version %d.%d\n" major minor;
 
-  t := Some (rpm_open ~debug:!settings.debug)
+  t := Some (rpm_open ~debug:!settings.debug);
+
+  rpm_arch := rpm_get_arch ();
+  if !settings.debug >= 1 then
+    printf "supermin: rpm: detected RPM architecture %s\n" !rpm_arch
 
 and opensuse_init s =
   rpm_init s;
-- 
2.20.1




More information about the Libguestfs mailing list