]> xenbits.xensource.com Git - libvirt.git/commitdiff
On systems with dmidecode version 2.10 or older,
authorPrerna Saxena <prerna@linux.vnet.ibm.com>
Tue, 7 Feb 2012 11:35:37 +0000 (17:05 +0530)
committerEric Blake <eblake@redhat.com>
Tue, 7 Feb 2012 21:45:22 +0000 (14:45 -0700)
 dmidecode displays processor information, followed by BIOS, system and
 memory-DIMM details.
 Calls to virSysinfoParseBIOS(), virSysinfoParseSystem() would update
 the buffer pointer 'base', so the processor information would be lost
 before virSysinfoParseProcessor() was called. Sysinfo would therefore
 not be able to display processor details -- It only described <bios>,
 <system> and <memory_device> details.
 This patch attempts to insulate sysinfo from ordering of dmidecode
 output.

Before the fix:
---------------
virsh # sysinfo
<sysinfo type='smbios'>
  <bios>
    ....
  </bios>
  <system>
    ....
  </system>
  <memory_device>
    ....
  </memory_device>

After the fix:
-------------
virsh # sysinfo
<sysinfo type='smbios'>
  <bios>
    ....
  </bios>
  <system>
    ....
  </system>
  <processor>
    ....
  </processor>
  <memory_device>
    ....
  </memory_device>

src/util/sysinfo.c

index de3108a7fc18e24ce53ca3cff3025b634ae1fef7..0e55d7ea4edaf62e73f153d3ae969bb181f881bb 100644 (file)
@@ -453,7 +453,7 @@ no_memory:
 
 virSysinfoDefPtr
 virSysinfoRead(void) {
-    char *path, *base;
+    char *path;
     virSysinfoDefPtr ret = NULL;
     char *outbuf = NULL;
     virCommandPtr cmd;
@@ -481,22 +481,20 @@ virSysinfoRead(void) {
 
     ret->type = VIR_SYSINFO_SMBIOS;
 
-    base = outbuf;
-
-    if ((base = virSysinfoParseBIOS(base, ret)) == NULL)
+    if ((virSysinfoParseBIOS(outbuf, ret)) == NULL)
         goto no_memory;
 
-    if ((base = virSysinfoParseSystem(base, ret)) == NULL)
+    if ((virSysinfoParseSystem(outbuf, ret)) == NULL)
         goto no_memory;
 
     ret->nprocessor = 0;
     ret->processor = NULL;
-    if ((base = virSysinfoParseProcessor(base, ret)) == NULL)
+    if ((virSysinfoParseProcessor(outbuf, ret)) == NULL)
         goto no_memory;
 
     ret->nmemory = 0;
     ret->memory = NULL;
-    if (virSysinfoParseMemory(base, ret) == NULL)
+    if (virSysinfoParseMemory(outbuf, ret) == NULL)
         goto no_memory;
 
 cleanup: