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>
virSysinfoDefPtr
virSysinfoRead(void) {
- char *path, *base;
+ char *path;
virSysinfoDefPtr ret = NULL;
char *outbuf = NULL;
virCommandPtr cmd;
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: