[libvirt] [PATCH 07/14] Convert drivers over to use virURIPtr for query params

Daniel P. Berrange berrange at redhat.com
Tue Mar 20 17:33:31 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Convert drivers currently using the qparams APIs, to instead
use the virURIPtr query parameters directly.

* src/esx/esx_util.c, src/hyperv/hyperv_util.c,
  src/remote/remote_driver.c, src/xenapi/xenapi_utils.c: Remove
  use of qparams
* src/util/qparams.h, src/util/qparams.c: Delete
* src/Makefile.am, src/libvirt_private.syms: Remove qparams
---
 src/Makefile.am            |    1 -
 src/esx/esx_util.c         |   17 +---
 src/hyperv/hyperv_util.c   |   17 +---
 src/libvirt_private.syms   |    6 -
 src/remote/remote_driver.c |   17 +---
 src/util/qparams.c         |  265 --------------------------------------------
 src/util/qparams.h         |   58 ----------
 src/xenapi/xenapi_utils.c  |   20 +---
 8 files changed, 9 insertions(+), 392 deletions(-)
 delete mode 100644 src/util/qparams.c
 delete mode 100644 src/util/qparams.h

diff --git a/src/Makefile.am b/src/Makefile.am
index e57eca2..39076cc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -70,7 +70,6 @@ UTIL_SOURCES =							\
 		util/pci.c util/pci.h				\
 		util/processinfo.c util/processinfo.h		\
 		util/hostusb.c util/hostusb.h			\
-		util/qparams.c util/qparams.h			\
 		util/sexpr.c util/sexpr.h			\
 		util/stats_linux.c util/stats_linux.h		\
 		util/storage_file.c util/storage_file.h		\
diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
index 67b07b7..a08ca19 100644
--- a/src/esx/esx_util.c
+++ b/src/esx/esx_util.c
@@ -28,7 +28,6 @@
 
 #include "internal.h"
 #include "datatypes.h"
-#include "qparams.h"
 #include "util.h"
 #include "memory.h"
 #include "logging.h"
@@ -45,8 +44,6 @@ int
 esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri)
 {
     int result = -1;
-    struct qparam_set *queryParamSet = NULL;
-    struct qparam *queryParam = NULL;
     int i;
     int noVerify;
     int autoAnswer;
@@ -62,14 +59,8 @@ esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri)
         return -1;
     }
 
-    queryParamSet = qparam_query_parse(uri->query);
-
-    if (queryParamSet == NULL) {
-        goto cleanup;
-    }
-
-    for (i = 0; i < queryParamSet->n; i++) {
-        queryParam = &queryParamSet->p[i];
+    for (i = 0; i < uri->paramsCount; i++) {
+        virURIParamPtr queryParam = &uri->params[i];
 
         if (STRCASEEQ(queryParam->name, "transport")) {
             VIR_FREE((*parsedUri)->transport);
@@ -204,10 +195,6 @@ esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri)
         esxUtil_FreeParsedUri(parsedUri);
     }
 
-    if (queryParamSet != NULL) {
-        free_qparam_set(queryParamSet);
-    }
-
     return result;
 }
 
diff --git a/src/hyperv/hyperv_util.c b/src/hyperv/hyperv_util.c
index 63c761b..81c087e 100644
--- a/src/hyperv/hyperv_util.c
+++ b/src/hyperv/hyperv_util.c
@@ -24,7 +24,6 @@
 
 #include "internal.h"
 #include "datatypes.h"
-#include "qparams.h"
 #include "util.h"
 #include "memory.h"
 #include "logging.h"
@@ -40,8 +39,6 @@ int
 hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri)
 {
     int result = -1;
-    struct qparam_set *queryParamSet = NULL;
-    struct qparam *queryParam = NULL;
     int i;
 
     if (parsedUri == NULL || *parsedUri != NULL) {
@@ -54,14 +51,8 @@ hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri)
         return -1;
     }
 
-    queryParamSet = qparam_query_parse(uri->query);
-
-    if (queryParamSet == NULL) {
-        goto cleanup;
-    }
-
-    for (i = 0; i < queryParamSet->n; i++) {
-        queryParam = &queryParamSet->p[i];
+    for (i = 0; i < uri->paramsCount; i++) {
+        virURIParamPtr queryParam = &uri->params[i];
 
         if (STRCASEEQ(queryParam->name, "transport")) {
             VIR_FREE((*parsedUri)->transport);
@@ -103,10 +94,6 @@ hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri)
         hypervFreeParsedUri(parsedUri);
     }
 
-    if (queryParamSet != NULL) {
-        free_qparam_set(queryParamSet);
-    }
-
     return result;
 }
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 49fb2ee..8a14838 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -917,12 +917,6 @@ virProcessInfoGetAffinity;
 virProcessInfoSetAffinity;
 
 
-# qparams.h
-free_qparam_set;
-qparam_get_query;
-qparam_query_parse;
-
-
 # secret_conf.h
 virSecretDefFormat;
 virSecretDefFree;
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 9de966f..bc6fea2 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -35,7 +35,6 @@
 #include "domain_event.h"
 #include "driver.h"
 #include "buf.h"
-#include "qparams.h"
 #include "remote_driver.h"
 #include "remote_protocol.h"
 #include "qemu_protocol.h"
@@ -311,7 +310,6 @@ doRemoteOpen (virConnectPtr conn,
               virConnectAuthPtr auth ATTRIBUTE_UNUSED,
               unsigned int flags)
 {
-    struct qparam_set *vars = NULL;
     char *transport_str = NULL;
     enum {
         trans_tls,
@@ -415,15 +413,11 @@ doRemoteOpen (virConnectPtr conn,
      * feasibly it might contain variables needed by the real driver,
      * although that won't be the case for now).
      */
-    struct qparam *var;
     int i;
 
     if (conn->uri) {
-        vars = qparam_query_parse (conn->uri->query);
-        if (vars == NULL) goto failed;
-
-        for (i = 0; i < vars->n; i++) {
-            var = &vars->p[i];
+        for (i = 0; i < conn->uri->paramsCount ; i++) {
+            virURIParamPtr var = &conn->uri->params[i];
             if (STRCASEEQ (var->name, "name")) {
                 VIR_FREE(name);
                 name = strdup (var->value);
@@ -484,7 +478,7 @@ doRemoteOpen (virConnectPtr conn,
             } else {
                 virURI tmpuri = {
                     .scheme = conn->uri->scheme,
-                    .query = qparam_get_query (vars),
+                    .query = virURIFormatQuery(conn->uri),
                     .path = conn->uri->path,
                     .fragment = conn->uri->fragment,
                 };
@@ -507,9 +501,6 @@ doRemoteOpen (virConnectPtr conn,
                     goto failed;
             }
         }
-
-        free_qparam_set (vars);
-        vars = NULL;
     } else {
         /* Probe URI server side */
         if (!(name = strdup("")))
@@ -732,8 +723,6 @@ doRemoteOpen (virConnectPtr conn,
 
  out_of_memory:
     virReportOOMError();
-    if (vars)
-        free_qparam_set (vars);
 
  failed:
     virNetClientProgramFree(priv->remoteProgram);
diff --git a/src/util/qparams.c b/src/util/qparams.c
deleted file mode 100644
index 83b568e..0000000
--- a/src/util/qparams.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Copyright (C) 2007, 2009-2010 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
- *
- * Authors:
- *    Richard W.M. Jones <rjones at redhat.com>
- *
- * Utility functions to help parse and assemble query strings.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "virterror_internal.h"
-#include "buf.h"
-#include "memory.h"
-#include "qparams.h"
-#include "viruri.h"
-
-#define VIR_FROM_THIS VIR_FROM_NONE
-
-struct qparam_set *
-new_qparam_set (int init_alloc, ...)
-{
-    va_list args;
-    struct qparam_set *ps;
-    const char *pname, *pvalue;
-
-    if (init_alloc <= 0) init_alloc = 1;
-
-    if (VIR_ALLOC(ps) < 0) {
-        virReportOOMError();
-        return NULL;
-    }
-    ps->n = 0;
-    ps->alloc = init_alloc;
-    if (VIR_ALLOC_N(ps->p, ps->alloc) < 0) {
-        VIR_FREE (ps);
-        virReportOOMError();
-        return NULL;
-    }
-
-    va_start (args, init_alloc);
-    while ((pname = va_arg (args, char *)) != NULL) {
-        pvalue = va_arg (args, char *);
-
-        if (append_qparam (ps, pname, pvalue) == -1) {
-            free_qparam_set (ps);
-            ps = NULL;
-            break;
-        }
-    }
-    va_end (args);
-
-    return ps;
-}
-
-int
-append_qparams (struct qparam_set *ps, ...)
-{
-    va_list args;
-    const char *pname, *pvalue;
-    int ret = 0;
-
-    va_start (args, ps);
-    while ((pname = va_arg (args, char *)) != NULL) {
-        pvalue = va_arg (args, char *);
-
-        if (append_qparam (ps, pname, pvalue) == -1) {
-            ret = -1;
-            break;
-        }
-    }
-    va_end (args);
-
-    return ret;
-}
-
-/* Ensure there is space to store at least one more parameter
- * at the end of the set.
- */
-static int
-grow_qparam_set (struct qparam_set *ps)
-{
-    if (ps->n >= ps->alloc) {
-        if (VIR_REALLOC_N(ps->p, ps->alloc * 2) < 0) {
-            virReportOOMError();
-            return -1;
-        }
-        ps->alloc *= 2;
-    }
-
-    return 0;
-}
-
-int
-append_qparam (struct qparam_set *ps,
-               const char *name, const char *value)
-{
-    char *pname, *pvalue;
-
-    pname = strdup (name);
-    if (!pname) {
-        virReportOOMError();
-        return -1;
-    }
-
-    pvalue = strdup (value);
-    if (!pvalue) {
-        VIR_FREE (pname);
-        virReportOOMError();
-        return -1;
-    }
-
-    if (grow_qparam_set (ps) == -1) {
-        VIR_FREE (pname);
-        VIR_FREE (pvalue);
-        return -1;
-    }
-
-    ps->p[ps->n].name = pname;
-    ps->p[ps->n].value = pvalue;
-    ps->p[ps->n].ignore = 0;
-    ps->n++;
-
-    return 0;
-}
-
-char *
-qparam_get_query (const struct qparam_set *ps)
-{
-    virBuffer buf = VIR_BUFFER_INITIALIZER;
-    int i, amp = 0;
-
-    for (i = 0; i < ps->n; ++i) {
-        if (!ps->p[i].ignore) {
-            if (amp) virBufferAddChar (&buf, '&');
-            virBufferStrcat (&buf, ps->p[i].name, "=", NULL);
-            virBufferURIEncodeString (&buf, ps->p[i].value);
-            amp = 1;
-        }
-    }
-
-    if (virBufferError(&buf)) {
-        virBufferFreeAndReset(&buf);
-        virReportOOMError();
-        return NULL;
-    }
-
-    return virBufferContentAndReset(&buf);
-}
-
-void
-free_qparam_set (struct qparam_set *ps)
-{
-    int i;
-
-    for (i = 0; i < ps->n; ++i) {
-        VIR_FREE (ps->p[i].name);
-        VIR_FREE (ps->p[i].value);
-    }
-    VIR_FREE (ps->p);
-    VIR_FREE (ps);
-}
-
-struct qparam_set *
-qparam_query_parse (const char *query)
-{
-    struct qparam_set *ps;
-    const char *end, *eq;
-
-    ps = new_qparam_set (0, NULL);
-    if (!ps) {
-        virReportOOMError();
-        return NULL;
-    }
-
-    if (!query || query[0] == '\0') return ps;
-
-    while (*query) {
-        char *name = NULL, *value = NULL;
-
-        /* Find the next separator, or end of the string. */
-        end = strchr (query, '&');
-        if (!end)
-            end = strchr (query, ';');
-        if (!end)
-            end = query + strlen (query);
-
-        /* Find the first '=' character between here and end. */
-        eq = strchr (query, '=');
-        if (eq && eq >= end) eq = NULL;
-
-        /* Empty section (eg. "&&"). */
-        if (end == query)
-            goto next;
-
-        /* If there is no '=' character, then we have just "name"
-         * and consistent with CGI.pm we assume value is "".
-         */
-        else if (!eq) {
-            name = xmlURIUnescapeString (query, end - query, NULL);
-            if (!name) goto out_of_memory;
-        }
-        /* Or if we have "name=" here (works around annoying
-         * problem when calling xmlURIUnescapeString with len = 0).
-         */
-        else if (eq+1 == end) {
-            name = xmlURIUnescapeString (query, eq - query, NULL);
-            if (!name) goto out_of_memory;
-        }
-        /* If the '=' character is at the beginning then we have
-         * "=value" and consistent with CGI.pm we _ignore_ this.
-         */
-        else if (query == eq)
-            goto next;
-
-        /* Otherwise it's "name=value". */
-        else {
-            name = xmlURIUnescapeString (query, eq - query, NULL);
-            if (!name)
-                goto out_of_memory;
-            value = xmlURIUnescapeString (eq+1, end - (eq+1), NULL);
-            if (!value) {
-                VIR_FREE(name);
-                goto out_of_memory;
-            }
-        }
-
-        /* Append to the parameter set. */
-        if (append_qparam (ps, name, value ? value : "") == -1) {
-            VIR_FREE(name);
-            VIR_FREE(value);
-            goto out_of_memory;
-        }
-        VIR_FREE(name);
-        VIR_FREE(value);
-
-    next:
-        query = end;
-        if (*query) query ++; /* skip '&' separator */
-    }
-
-    return ps;
-
- out_of_memory:
-    virReportOOMError();
-    free_qparam_set (ps);
-    return NULL;
-}
diff --git a/src/util/qparams.h b/src/util/qparams.h
deleted file mode 100644
index 6a3d790..0000000
--- a/src/util/qparams.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (C) 2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
- *
- * Authors:
- *    Richard W.M. Jones <rjones at redhat.com>
- *
- * Utility functions to help parse and assemble query strings.
- */
-
-#ifndef _QPARAMS_H_
-# define _QPARAMS_H_
-
-/* Single web service query parameter 'name=value'. */
-struct qparam {
-  char *name;			/* Name (unescaped). */
-  char *value;			/* Value (unescaped). */
-  int ignore;			/* Ignore this field in qparam_get_query */
-};
-
-/* Set of parameters. */
-struct qparam_set {
-  int n;			/* number of parameters used */
-  int alloc;			/* allocated space */
-  struct qparam *p;		/* array of parameters */
-};
-
-/* New parameter set. */
-extern struct qparam_set *new_qparam_set (int init_alloc, ...)
-    ATTRIBUTE_SENTINEL;
-
-/* Appending parameters. */
-extern int append_qparams (struct qparam_set *ps, ...)
-    ATTRIBUTE_SENTINEL;
-extern int append_qparam (struct qparam_set *ps,
-                          const char *name, const char *value);
-
-/* Get a query string ("name=value&name=value&...") */
-extern char *qparam_get_query (const struct qparam_set *ps);
-
-/* Parse a query string into a parameter set. */
-extern struct qparam_set *qparam_query_parse (const char *query);
-
-extern void free_qparam_set (struct qparam_set *ps);
-
-#endif /* _QPARAMS_H_ */
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
index 943b6c0..516cf8f 100644
--- a/src/xenapi/xenapi_utils.c
+++ b/src/xenapi/xenapi_utils.c
@@ -35,7 +35,6 @@
 #include "memory.h"
 #include "buf.h"
 #include "logging.h"
-#include "qparams.h"
 #include "viruri.h"
 #include "xenapi_driver_private.h"
 #include "xenapi_utils.h"
@@ -98,21 +97,9 @@ xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify)
 {
     int result = 0;
     int i;
-    struct qparam_set *queryParamSet = NULL;
-    struct qparam *queryParam = NULL;
 
-#ifdef HAVE_XMLURI_QUERY_RAW
-    queryParamSet = qparam_query_parse(uri->query_raw);
-#else
-    queryParamSet = qparam_query_parse(uri->query);
-#endif
-
-    if (queryParamSet == NULL) {
-        goto failure;
-    }
-
-    for (i = 0; i < queryParamSet->n; i++) {
-        queryParam = &queryParamSet->p[i];
+    for (i = 0; i < uri->paramsCount; i++) {
+        virURIParamPtr queryParam = &uri->params[i];
         if (STRCASEEQ(queryParam->name, "no_verify")) {
             if (noVerify == NULL) {
                 continue;
@@ -127,9 +114,6 @@ xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify)
     }
 
   cleanup:
-    if (queryParamSet != NULL) {
-        free_qparam_set(queryParamSet);
-    }
 
     return result;
 
-- 
1.7.7.6




More information about the libvir-list mailing list