]> xenbits.xensource.com Git - libvirt.git/commitdiff
* src/test.c: converted to new XPath APIs
authorDaniel Veillard <veillard@redhat.com>
Fri, 6 Apr 2007 15:34:09 +0000 (15:34 +0000)
committerDaniel Veillard <veillard@redhat.com>
Fri, 6 Apr 2007 15:34:09 +0000 (15:34 +0000)
* src/xml.c: fixed a return comment
Daniel

ChangeLog
src/test.c
src/xml.c

index 1183c0d46c337dc83a2cb3dfe068e6d5840b0785..08618743da54a47a230e8b1967742ee873b6bef2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Apr  6 17:33:13 CEST 2007 Daniel Veillard <veillard@redhat.com>
+
+       * src/test.c: converted to new XPath APIs
+       * src/xml.c: fixed a return comment
+
 Fri Apr  6 14:27:13 CEST 2007 Daniel Veillard <veillard@redhat.com>
 
        * src/xml.[ch]: first patch to clean up XPath accesses with new 
index 41e3089fb6145bbf47ded7b35e87dffa241c7e23..7f4a3815eb76c063c214da56bf33265cc7f69afd 100644 (file)
@@ -261,7 +261,6 @@ static int testLoadDomain(virConnectPtr conn,
                           xmlDocPtr xml) {
     xmlNodePtr root = NULL;
     xmlXPathContextPtr ctxt = NULL;
-    xmlXPathObjectPtr obj = NULL;
     char *name = NULL;
     unsigned char rawuuid[VIR_UUID_BUFLEN];
     char *dst_uuid;
@@ -270,8 +269,9 @@ static int testLoadDomain(virConnectPtr conn,
     unsigned long memory = 0;
     unsigned long maxMem = 0;
     int nrVirtCpu;
-    char *conv;
-    int handle = -1, i;
+    char *str;
+    int handle = -1, i, ret;
+    long l;
     virDomainRestart onReboot = VIR_DOMAIN_RESTART;
     virDomainRestart onPoweroff = VIR_DOMAIN_DESTROY;
     virDomainRestart onCrash = VIR_DOMAIN_RENAME_RESTART;
@@ -294,102 +294,81 @@ static int testLoadDomain(virConnectPtr conn,
         goto error;
     }
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/name[1])", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+    name = virXPathString("string(/domain/name[1])", ctxt);
+    if (name == NULL) {
         testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, _("domain name"));
         goto error;
     }
-    name = strdup((const char *)obj->stringval);
-    xmlXPathFreeObject(obj);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/uuid[1])", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+    str = virXPathString("string(/domain/uuid[1])", ctxt);
+    if (str == NULL) {
         testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain uuid"));
         goto error;
     }
     dst_uuid = (char *) &rawuuid[0];
-    if (!(virParseUUID((char **)&dst_uuid, (const char *)obj->stringval))) {
+    if (!(virParseUUID((char **)&dst_uuid, str))) {
         testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain uuid"));
         goto error;
     }
-    xmlXPathFreeObject(obj);
+    free(str);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/memory[1])", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
-        testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain memory"));
-        goto error;
-    }
-    maxMem = strtoll((const char*)obj->stringval, &conv, 10);
-    if (conv == (const char*)obj->stringval) {
+
+    ret = virXPathLong("string(/domain/memory[1])", ctxt, &l);
+    if (ret != 0) {
         testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain memory"));
         goto error;
     }
-    xmlXPathFreeObject(obj);
+    maxMem = l;
 
-
-    obj = xmlXPathEval(BAD_CAST "string(/domain/currentMemory[1])", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+    ret = virXPathLong("string(/domain/currentMemory[1])", ctxt, &l);
+    if (ret == -1) {
         memory = maxMem;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain current memory"));
+       goto error;
     } else {
-        memory = strtoll((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain current memory"));
-            goto error;
-        }
+        memory = l;
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/vcpu[1])", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+    ret = virXPathLong("string(/domain/vcpu[1])", ctxt, &l);
+    if (ret == -1) {
         nrVirtCpu = 1;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain vcpus"));
+       goto error;
     } else {
-        nrVirtCpu = strtoll((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain vcpus"));
-            goto error;
-        }
+        nrVirtCpu = l;
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/on_reboot[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
+    str = virXPathString("string(/domain/on_reboot[1])", ctxt);
+    if (str != NULL) {
+        if (!(onReboot = testRestartStringToFlag(str))) {
             testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain reboot behaviour"));
+           free(str);
             goto error;
         }
+       free(str);
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/on_poweroff[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
+    str = virXPathString("string(/domain/on_poweroff[1])", ctxt);
+    if (str != NULL) {
+        if (!(onReboot = testRestartStringToFlag(str))) {
             testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain poweroff behaviour"));
+           free(str);
             goto error;
         }
+       free(str);
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
 
-    obj = xmlXPathEval(BAD_CAST "string(/domain/on_crash[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
+    str = virXPathString("string(/domain/on_crash[1])", ctxt);
+    if (str != NULL) {
+        if (!(onReboot = testRestartStringToFlag(str))) {
             testError(conn, NULL, VIR_ERR_XML_ERROR, _("domain crash behaviour"));
+           free(str);
             goto error;
         }
+       free(str);
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
 
     priv = (testPrivatePtr) conn->privateData;
     con = &node->connections[priv->handle];
@@ -427,8 +406,6 @@ static int testLoadDomain(virConnectPtr conn,
     return (0);
 
  error:
-    if (obj)
-        xmlXPathFreeObject(obj);
     if (name)
         free(name);
     return (-1);
@@ -539,11 +516,13 @@ static char *testBuildFilename(const char *relativeTo,
 static int testOpenFromFile(virConnectPtr conn,
                             int connid,
                             const char *file) {
-    int fd, i;
+    int fd, i, ret;
+    long l;
+    char *str;
     xmlDocPtr xml;
     xmlNodePtr root = NULL;
+    xmlNodePtr *domains;
     xmlXPathContextPtr ctxt = NULL;
-    xmlXPathObjectPtr obj = NULL;
     virNodeInfoPtr nodeInfo;
     testPrivatePtr priv = (testPrivatePtr) conn->privateData;
 
@@ -579,108 +558,79 @@ static int testOpenFromFile(virConnectPtr conn,
     memmove(&node->connections[connid].nodeInfo, &defaultNodeInfo, sizeof(defaultNodeInfo));
 
     nodeInfo = &node->connections[connid].nodeInfo;
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/nodes[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->nodes = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu numa nodes"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
+    ret = virXPathLong("string(/node/cpu/nodes[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->nodes = l;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu numa nodes"));
+       goto error;
     }
 
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/sockets[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->sockets = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu sockets"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
+    ret = virXPathLong("string(/node/cpu/sockets[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->sockets = l;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu sockets"));
+       goto error;
     }
 
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/cores[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->cores = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu cores"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
+    ret = virXPathLong("string(/node/cpu/cores[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->cores = l;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu cores"));
+       goto error;
     }
 
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/threads[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->threads = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu threads"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
+    ret = virXPathLong("string(/node/cpu/threads[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->threads = l;
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu threads"));
+       goto error;
     }
+
     nodeInfo->cpus = nodeInfo->cores * nodeInfo->threads * nodeInfo->sockets * nodeInfo->nodes;
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/active[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        unsigned int active = strtol((const char*)obj->stringval, &conv, 10);    
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node active cpu"));
-            goto error;
-        }
-        if (active < nodeInfo->cpus) {
-            nodeInfo->cpus = active;
-        }
-        xmlXPathFreeObject(obj);
-    }
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/mhz[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->mhz = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu mhz"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
-    }
-    obj = xmlXPathEval(BAD_CAST "string(/node/cpu/model[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        strncpy(nodeInfo->model, (const char *)obj->stringval, sizeof(nodeInfo->model)-1);
+    ret = virXPathLong("string(/node/cpu/active[1])", ctxt, &l);
+    if (ret == 0) {
+        if (l < nodeInfo->cpus) {
+           nodeInfo->cpus = l;
+       }
+    } else if (ret == -2) {
+       testError(conn, NULL, VIR_ERR_XML_ERROR, _("node active cpu"));
+       goto error;
+    }
+    ret = virXPathLong("string(/node/cpu/mhz[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->mhz = l;
+    } else if (ret == -2) {
+        testError(conn, NULL, VIR_ERR_XML_ERROR, _("node cpu mhz"));
+       goto error;
+    }
+
+    str = virXPathString("string(/node/cpu/model[1])", ctxt);
+    if (str != NULL) {
+        strncpy(nodeInfo->model, str, sizeof(nodeInfo->model)-1);
         nodeInfo->model[sizeof(nodeInfo->model)-1] = '\0';
-        xmlXPathFreeObject(obj);
+        free(str);
     }
 
-    obj = xmlXPathEval(BAD_CAST "string(/node/memory[1])", ctxt);
-    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
-        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
-        char *conv = NULL;
-        nodeInfo->memory = strtol((const char*)obj->stringval, &conv, 10);
-        if (conv == (const char*)obj->stringval) {
-            testError(conn, NULL, VIR_ERR_XML_ERROR, _("node memory"));
-            goto error;
-        }
-        xmlXPathFreeObject(obj);
+    ret = virXPathLong("string(/node/memory[1])", ctxt, &l);
+    if (ret == 0) {
+        nodeInfo->memory = l;
+    } else if (ret == -2) {
+        testError(conn, NULL, VIR_ERR_XML_ERROR, _("node memory"));
+       goto error;
     }
 
-    obj = xmlXPathEval(BAD_CAST "/node/domain", ctxt);
-    if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
-        (obj->nodesetval == NULL)) {
+    ret = virXPathNodeSet("/node/domain", ctxt, &domains);
+    if (ret < 0) {
         testError(NULL, NULL, VIR_ERR_XML_ERROR, _("node domain list"));
         goto error;
     }
 
-    for (i = 0 ; i < obj->nodesetval->nodeNr ; i++) {
-        xmlChar *domFile = xmlGetProp(obj->nodesetval->nodeTab[i], BAD_CAST "file");
+    for (i = 0 ; i < ret ; i++) {
+        xmlChar *domFile = xmlGetProp(domains[i], BAD_CAST "file");
         char *absFile = testBuildFilename(file, (const char *)domFile);
         int domid = nextDomID++;
         free(domFile);
@@ -695,8 +645,9 @@ static int testOpenFromFile(virConnectPtr conn,
         free(absFile);
         node->connections[connid].numDomains++;
     }
+    if (domains != NULL)
+        free(domains);
 
-    xmlXPathFreeObject(obj);
     xmlFreeDoc(xml);
 
     return (0);
@@ -709,8 +660,6 @@ static int testOpenFromFile(virConnectPtr conn,
         node->connections[connid].numDomains = 0;
         node->connections[connid].active = 0;
     }
-    if (obj)
-        xmlXPathFreeObject(obj);
     if (xml)
         xmlFreeDoc(xml);
     if (fd != -1)
index ed447d2fb7a91d0f38d5bf68bac26628d41b760d..4e04a2e78c614b5474b98574bad66ccde44345e3 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -120,7 +120,8 @@ virXPathNumber(const char *xpath, xmlXPathContextPtr ctxt, double *value) {
  * Convenience function to evaluate an XPath number
  *
  * Returns 0 in case of success in which case @value is set,
- *         or -1 if the evaluation failed.
+ *         or -1 if the XPath evaluation failed or -2 if the
+ *         value doesn't have a long format.
  */
 int
 virXPathLong(const char *xpath, xmlXPathContextPtr ctxt, long *value) {