X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fvirt_mem_utsname.ml;h=457e339e469695ced0b0e01e1c56479c8263f845;hb=5a64e16f8c9243178af6bd152cc77d471ca1f5be;hp=61a2b374045259ee5a4fb9e17ffd52fc1692555e;hpb=643e58b5e26c18f2cfc1c7b9aa676cb44feee847;p=virt-mem.git diff --git a/lib/virt_mem_utsname.ml b/lib/virt_mem_utsname.ml index 61a2b37..457e339 100644 --- a/lib/virt_mem_utsname.ml +++ b/lib/virt_mem_utsname.ml @@ -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,23 +37,24 @@ 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 (domid, name, arch, mem, lookup_ksym) = +let find_utsname debug ({ domname = name; mem = mem; ksyms = ksyms } + as kimage) = let utsname = (* In Linux 2.6.25, the symbol is init_uts_ns. * http://lxr.linux.no/linux/init/version.c *) try - let addr = lookup_ksym "init_uts_ns" in + let addr = Ksymmap.find "init_uts_ns" ksyms in let bs = Bitstring.bitstring_of_string (get_bytes mem addr (65*6+4)) in (bitmatch bs with @@ -81,13 +72,15 @@ let find_utsname debug (domid, name, arch, mem, lookup_ksym) = * http://lxr.linux.no/linux-bk+v2.6.9/include/linux/utsname.h#L24 *) try - let addr = lookup_ksym "system_utsname" in + let addr = Ksymmap.find "system_utsname" ksyms in let bits = Bitstring.bitstring_of_string (get_bytes mem addr (65*6)) in parse_utsname bits - with - Not_found -> - eprintf (f_"%s: could not find utsname in kernel image\n") name + with + Not_found -> + eprintf (f_"%s: could not find utsname in kernel image\n") + name; + None in - (domid, name, arch, mem, lookup_ksym, utsname) + { kimage with utsname = utsname }