Extracted kernel structures for device addressing in ifconfig.
[virt-mem.git] / lib / virt_mem_utsname.ml
index 084ba92..e766da4 100644 (file)
@@ -24,16 +24,6 @@ open Virt_mem_utils
 open Virt_mem_types
 open Virt_mem_mmap
 
-(* Truncate an OCaml string at the first ASCII NUL character, ie. as
- * if it were a C string.
- *)
-let truncate str =
-  try
-    let i = String.index str '\000' in
-    String.sub str 0 i
-  with
-    Not_found -> str
-
 let parse_utsname bits =
   (* 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
@@ -47,17 +37,17 @@ let parse_utsname bits =
       machine : 65*8 : string;
       domainname : 65*8 : string } ->
       Some {
-       kernel_name = "Linux";
-       nodename = truncate nodename;
-       kernel_release = truncate release;
-       kernel_version = truncate version;
-       machine = truncate machine;
-       domainname = truncate domainname
+       uts_kernel_name = "Linux";
+       uts_nodename = truncate_c_string nodename;
+       uts_kernel_release = truncate_c_string release;
+       uts_kernel_version = truncate_c_string version;
+       uts_machine = truncate_c_string machine;
+       uts_domainname = truncate_c_string domainname
       }
   | { _ } ->
       None
 
-let find_utsname debug ({ domname = name; mem = mem } as image, ksymmap) =
+let find_utsname debug ({ domname = name; mem = mem } as image) ksymmap =
   let utsname =
     (* In Linux 2.6.25, the symbol is init_uts_ns.
      * http://lxr.linux.no/linux/init/version.c
@@ -88,6 +78,8 @@ let find_utsname debug ({ domname = name; mem = mem } as image, ksymmap) =
          parse_utsname bits
            with
              Not_found ->
-               eprintf (f_"%s: could not find utsname in kernel image\n") name
+               eprintf (f_"%s: could not find utsname in kernel image\n")
+                 name;
+               None
   in
-  (image, ksymmap, utsname)
+  image, utsname