Combined binary.
[virt-mem.git] / uname / virt_uname.ml
index 14a8bcc..f2f6ddc 100644 (file)
@@ -23,20 +23,7 @@ open Virt_mem_gettext.Gettext
 open Virt_mem_utils
 open Virt_mem_mmap
 
-let usage = s_"NAME
-  virt-uname - uname command for virtual machines
-
-SUMMARY
-  virt-uname [-options] [domains]
-
-DESCRIPTION
-  virt-uname prints the uname information such as OS version,
-  architecture and node name for virtual machines running under
-  libvirt."
-
-let _, images = Virt_mem.start usage
-
-let () =
+let run debug images =
   (* Print new_utsname structure from bitstring. *)
   let print_new_utsname name bs =
     (* Truncate an OCaml string at the first ASCII NUL character, ie. as
@@ -49,16 +36,20 @@ let () =
       with
        Not_found -> str
     in
+    (* Expect the first (sysname) field to always be "Linux", which is
+     * also a good way to tell if we're synchronized to the right bit of
+     * memory.
+     *)
     bitmatch bs with
-    | { sysname : 65*8 : string;
+    | { "Linux\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" : 65*8 : string;
        nodename : 65*8 : string;
        release : 65*8 : string;
        version : 65*8 : string;
        machine : 65*8 : string;
        domainname : 65*8 : string } ->
-       printf "%s: %s %s %s %s %s %s\n"
+       printf "%s: Linux %s %s %s %s %s\n"
          name
-         (truncate sysname) (truncate nodename) (truncate release)
+         (truncate nodename) (truncate release)
          (truncate version) (truncate machine) (truncate domainname)
     | { _ } ->
        eprintf (f_"%s: unexpected system_utsname in kernel image\n")
@@ -96,3 +87,11 @@ let () =
            Not_found ->
              eprintf (f_"%s: could not find utsname in kernel image\n") name
   ) images
+
+let summary = s_"uname command for virtual machines"
+let description = s_"\
+virt-uname prints the uname information such as OS version,
+architecture and node name for virtual machines running under
+libvirt."
+
+let () = Virt_mem.register "uname" summary description true run