On Tue, May 13, 2008 at 12:31:36AM +0100, Daniel P. Berrange wrote:
The QEMU driver supports booting Xen guests via the Xenner
hypervisor. For
such paravirtualized guests there is no regular BIOS, so the bootloader has
to be run on the host. Xenner defaults to pygrub, but since libvirt has a
generic syntax for bootloaders, we should use it. So this patch adds support
for the <bootloader> syntax in the QEMU drive, and passes this to Xenner via
the -bootloader arg.
The patch is overly large, because when we have a bootloader we need to skip
the kernel/initrd/cmdline/boot elements & thus caused alot of intrusive code
re-indentation .
[...]
+ /* Extract bootloader */
+ obj = xmlXPathEval(BAD_CAST "string(/domain/bootloader)", ctxt);
+ if ((obj != NULL) && (obj->type == XPATH_STRING) &&
+ (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
+ strncpy(def->os.bootloader, (const char*)obj->stringval,
sizeof(def->os.bootloader));
+ NUL_TERMINATE(def->os.bootloader);
+ xmlXPathFreeObject(obj);
+
+ /* Set a default OS type, since <type> is optional with bootloader */
+ strcpy(def->os.type, "xen");
+ }
+
/* Extract OS type info */
obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
(obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+ if (!def->os.type[0]) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_OS_TYPE,
+ "%s", _("no OS type"));
+ goto error;
+ }
+ } else {
+ strcpy(def->os.type, (const char *)obj->stringval);
+ xmlXPathFreeObject(obj);
+ }
Argh, that part of the code has not been cleaned up, using virXPathString
there would make this way easier to read and check.
The big indentation block change inflated the patch size a bit. it still
look fine.
Daniel
--
Red Hat Virtualization group
http://redhat.com/virtualization/
Daniel Veillard | virtualization library
http://libvirt.org/
veillard(a)redhat.com | libxml GNOME XML XSLT toolkit
http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine
http://rpmfind.net/