[libvirt] [libvirt-php PATCH 2/4] implement xml_to_native and xml_from_native

Dawid Zamirski dzamirski at datto.com
Wed Jun 29 16:29:58 UTC 2016


From: Dawid Zamirski <dzamirski at dattobackup.com>

This patch implements virConnectDomainXMLFromNative and
virConnectDomainXMLToNative in libvirt PHP bindings. The PHP functions
are called libvirt_domain_xml_from_native and
libvirt_domain_xml_to_native respectively.
---
 src/libvirt-php.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/libvirt-php.h |  2 ++
 2 files changed, 82 insertions(+)

diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index 0e9e6b5..8602b93 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -252,6 +252,18 @@ ZEND_ARG_INFO(0, conn)
 ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_domain_xml_from_native, 0, 0, 3)
+ZEND_ARG_INFO(0, conn)
+ZEND_ARG_INFO(0, format)
+ZEND_ARG_INFO(0, config_data)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_domain_xml_to_native, 0, 0, 3)
+ZEND_ARG_INFO(0, conn)
+ZEND_ARG_INFO(0, format)
+ZEND_ARG_INFO(0, xml_data)
+ZEND_END_ARG_INFO()
+
 ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_domain_memory_peek, 0, 0, 4)
 ZEND_ARG_INFO(0, conn)
 ZEND_ARG_INFO(0, start)
@@ -580,6 +592,8 @@ static zend_function_entry libvirt_functions[] = {
     PHP_FE(libvirt_domain_reboot,                arginfo_libvirt_conn_flags)
     PHP_FE(libvirt_domain_define_xml,            arginfo_libvirt_conn_xml)
     PHP_FE(libvirt_domain_create_xml,            arginfo_libvirt_conn_xml)
+    PHP_FE(libvirt_domain_xml_from_native,       arginfo_libvirt_domain_xml_from_native)
+    PHP_FE(libvirt_domain_xml_to_native,         arginfo_libvirt_domain_xml_to_native)
     PHP_FE(libvirt_domain_memory_peek,           arginfo_libvirt_domain_memory_peek)
     PHP_FE(libvirt_domain_memory_stats,          arginfo_libvirt_conn_flags)
     PHP_FE(libvirt_domain_set_memory,            arginfo_libvirt_domain_set_memory)
@@ -6695,6 +6709,72 @@ PHP_FUNCTION(libvirt_domain_create_xml)
 }
 
 /*
+ * Function name:   libvirt_domain_xml_from_native
+ * Since version:   0.5.3
+ * Description:     Function is used to convert native configuration data to libvirt domain XML
+ * Arguments:       @conn [resource]: libvirt connection resource
+ *                  @format [string]: configuration format converting from
+ *                  @config_data [string]: content of the native config file
+ * Returns:         libvirt domain XML, FALSE on error
+ */
+PHP_FUNCTION(libvirt_domain_xml_from_native)
+{
+    php_libvirt_connection *conn = NULL;
+    zval *zconn;
+    char *config_data = NULL;
+    char *format = NULL;
+    char *xml = NULL;
+    strsize_t config_data_len;
+    strsize_t format_len;
+    unsigned int flags = 0;
+
+    GET_CONNECTION_FROM_ARGS("rss", &zconn, &format, &format_len, &config_data, &config_data_len);
+
+    xml = virConnectDomainXMLFromNative(conn->conn, format, config_data, flags);
+
+    if (xml == NULL) {
+        set_error_if_unset("Cannot convert native format to XML" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    VIRT_RETVAL_STRING(xml);
+    free(xml);
+}
+
+/*
+ * Function name:   libvirt_domain_xml_to_native
+ * Since version:   0.5.3
+ * Description:     Function is used to convert libvirt domain XML to native configuration
+ * Arguments:       @conn [resource]: libvirt connection resource
+ *                  @format [string]: configuration format converting to
+ *                  @xml_data [string]: content of the libvirt domain xml file
+ * Returns:         contents of the native data file, FALSE on error
+*/
+PHP_FUNCTION(libvirt_domain_xml_to_native)
+{
+    php_libvirt_connection *conn = NULL;
+    zval *zconn;
+    char *xml_data = NULL;
+    char *format  = NULL;
+    char *config_data = NULL;
+    strsize_t xml_data_len;
+    strsize_t format_len;
+    unsigned int flags = 0;
+
+    GET_CONNECTION_FROM_ARGS("rss", &zconn, &format, &format_len, &xml_data, &xml_data_len);
+
+    config_data = virConnectDomainXMLToNative(conn->conn, format, xml_data, flags);
+
+    if (config_data == NULL) {
+        set_error_if_unset("Cannot convert to native format from XML" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    VIRT_RETVAL_STRING(config_data);
+    free(config_data);
+}
+
+/*
  * Function name:   libvirt_domain_memory_peek
  * Since version:   0.4.1(-1)
  * Description:     Function is used to get the domain's memory peek value
diff --git a/src/libvirt-php.h b/src/libvirt-php.h
index 561ccff..9f89ddd 100644
--- a/src/libvirt-php.h
+++ b/src/libvirt-php.h
@@ -412,6 +412,8 @@ PHP_FUNCTION(libvirt_domain_undefine);
 PHP_FUNCTION(libvirt_domain_reboot);
 PHP_FUNCTION(libvirt_domain_define_xml);
 PHP_FUNCTION(libvirt_domain_create_xml);
+PHP_FUNCTION(libvirt_domain_xml_from_native);
+PHP_FUNCTION(libvirt_domain_xml_to_native);
 PHP_FUNCTION(libvirt_domain_set_max_memory);
 PHP_FUNCTION(libvirt_domain_set_memory);
 PHP_FUNCTION(libvirt_domain_set_memory_flags);
-- 
2.7.4




More information about the libvir-list mailing list