X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fvirt_mem_utsname.ml;h=33ee969cc304acd3b04996f19af7f0159d6ba1a9;hb=f21906190fff095427d1c631dc295bb142d61cdf;hp=61a2b374045259ee5a4fb9e17ffd52fc1692555e;hpb=643e58b5e26c18f2cfc1c7b9aa676cb44feee847;p=virt-mem.git diff --git a/lib/virt_mem_utsname.ml b/lib/virt_mem_utsname.ml index 61a2b37..33ee969 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 @@ -48,22 +38,22 @@ let parse_utsname bits = 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 + nodename = truncate_c_string nodename; + kernel_release = truncate_c_string release; + kernel_version = truncate_c_string version; + machine = truncate_c_string machine; + domainname = truncate_c_string domainname } | { _ } -> None -let find_utsname debug (domid, name, arch, mem, lookup_ksym) = +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 *) try - let addr = lookup_ksym "init_uts_ns" in + let addr = Ksymmap.find "init_uts_ns" ksymmap in let bs = Bitstring.bitstring_of_string (get_bytes mem addr (65*6+4)) in (bitmatch bs with @@ -81,7 +71,7 @@ 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" ksymmap in let bits = Bitstring.bitstring_of_string (get_bytes mem addr (65*6)) in @@ -90,4 +80,4 @@ let find_utsname debug (domid, name, arch, mem, lookup_ksym) = Not_found -> eprintf (f_"%s: could not find utsname in kernel image\n") name in - (domid, name, arch, mem, lookup_ksym, utsname) + (image, ksymmap, utsname)