Re: [libvirt] [libvirt-gconfig PATCHv2 14/32] Add some GVirConfigOs setters

2011-11-22 Thread Daniel P. Berrange
On Mon, Nov 21, 2011 at 07:04:11PM +0100, Christophe Fergeau wrote:
> --
> v2: merged several related commits
> use safer g_strcmp0 for string comparison
> use g_return_if_fail to test function args for sanity
> ---
>  libvirt-gconfig/libvirt-gconfig-os.c |  138 
> ++
>  libvirt-gconfig/libvirt-gconfig-os.h |   27 +++
>  libvirt-gconfig/libvirt-gconfig.sym  |   11 +++
>  3 files changed, 176 insertions(+), 0 deletions(-)

ACK


Daniel
-- 
|: http://berrange.com  -o-http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org  -o- http://virt-manager.org :|
|: http://autobuild.org   -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org   -o-   http://live.gnome.org/gtk-vnc :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-gconfig PATCHv2 14/32] Add some GVirConfigOs setters

2011-11-21 Thread Christophe Fergeau
--
v2: merged several related commits
use safer g_strcmp0 for string comparison
use g_return_if_fail to test function args for sanity
---
 libvirt-gconfig/libvirt-gconfig-os.c |  138 ++
 libvirt-gconfig/libvirt-gconfig-os.h |   27 +++
 libvirt-gconfig/libvirt-gconfig.sym  |   11 +++
 3 files changed, 176 insertions(+), 0 deletions(-)

diff --git a/libvirt-gconfig/libvirt-gconfig-os.c 
b/libvirt-gconfig/libvirt-gconfig-os.c
index c09e32a..b430eb6 100644
--- a/libvirt-gconfig/libvirt-gconfig-os.c
+++ b/libvirt-gconfig/libvirt-gconfig-os.c
@@ -27,6 +27,8 @@
 #include 
 
 #include "libvirt-gconfig/libvirt-gconfig.h"
+#include "libvirt-gconfig/libvirt-gconfig-helpers-private.h"
+#include "libvirt-gconfig/libvirt-gconfig-object-private.h"
 
 extern gboolean debugFlag;
 
@@ -77,3 +79,139 @@ GVirConfigOs *gvir_config_os_new_from_xml(const gchar *xml, 
GError **error)
  NULL, xml, error);
 return GVIR_CONFIG_OS(object);
 }
+
+void gvir_config_os_set_os_type(GVirConfigOs *os, GVirConfigOsType type)
+{
+xmlNodePtr node;
+const char *type_str;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "type");
+g_return_if_fail(node != NULL);
+type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_OS_TYPE, type);
+g_return_if_fail(type_str != NULL);
+xmlNodeSetContent(node, (xmlChar*)type_str);
+}
+
+void gvir_config_os_set_loader(GVirConfigOs *os, const char * loader)
+{
+gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(os),
+"loader", loader);
+}
+
+void gvir_config_os_enable_boot_menu(GVirConfigOs *os, gboolean enable)
+{
+xmlNodePtr node;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), 
"bootmenu");
+g_return_if_fail(node != NULL);
+if (enable)
+xmlNewProp(node, (xmlChar*)"enable", (xmlChar*)"yes");
+else
+xmlNewProp(node, (xmlChar*)"enable", (xmlChar*)"no");
+}
+
+void gvir_config_os_bios_enable_serial(GVirConfigOs *os, gboolean enable)
+{
+xmlNodePtr node;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "bios");
+g_return_if_fail(node != NULL);
+if (enable)
+xmlNewProp(node, (xmlChar*)"useserial", (xmlChar*)"yes");
+else
+xmlNewProp(node, (xmlChar*)"useserial", (xmlChar*)"no");
+}
+
+void gvir_config_os_set_smbios_mode(GVirConfigOs *os,
+GVirConfigOsSmBiosMode mode)
+{
+xmlNodePtr node;
+const char *mode_str;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "smbios");
+g_return_if_fail(node != NULL);
+mode_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_OS_SM_BIOS_MODE,
+  mode);
+if (mode_str != NULL)
+xmlNewProp(node, (xmlChar*)"mode", (xmlChar*)mode_str);
+}
+
+/**
+ * gvir_config_os_set_boot_devices:
+ * @boot_devices: (in) (element-type LibvirtGConfig.OsBootDevice):
+ */
+void gvir_config_os_set_boot_devices(GVirConfigOs *os, GList *boot_devices)
+{
+GList *it;
+xmlNodePtr os_node;
+xmlNodePtr node;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os));
+g_return_if_fail(os_node != NULL);
+
+node = os_node->children;
+while (node != NULL) {
+xmlNodePtr next_node;
+next_node = node->next;
+if (g_strcmp0("boot", (char *)node->name) == 0) {
+xmlUnlinkNode(node);
+xmlFreeNode(node);
+}
+node = next_node;
+}
+
+for (it = boot_devices; it != NULL; it = it->next) {
+const char *dev;
+
+dev = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_OS_BOOT_DEVICE,
+ GPOINTER_TO_INT(it->data));
+g_warn_if_fail(dev != NULL);
+if (dev != NULL) {
+node = xmlNewDocNode(NULL, NULL, (xmlChar*)"boot", NULL);
+xmlNewProp(node, (xmlChar*)"dev", (xmlChar*)dev);
+xmlAddChild(os_node, node);
+}
+}
+}
+
+void gvir_config_os_set_arch(GVirConfigOs *os, const char *arch)
+{
+xmlNodePtr os_node;
+xmlNodePtr os_type_node;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os));
+g_return_if_fail(os_node != NULL);
+
+os_type_node = gvir_config_xml_get_element(os_node, "type", NULL);
+g_return_if_fail(os_type_node != NULL);
+
+xmlNewProp(os_type_node, (xmlChar*)"arch", (xmlChar*)arch);
+}
+
+void gvir_config_os_set_machine(GVirConfigOs *os, const char *machine)
+{
+xmlNodePtr os_node;
+xmlNodePtr os_type_node;
+
+g_return_if_fail(GVIR_IS_CONFIG_OS(os));
+
+os_node = gvir_