[libvirt] [PATCH 07/14] Convert drivers over to use virURIPtr for query params
Osier Yang
jyang at redhat.com
Thu Mar 22 07:43:19 UTC 2012
On 2012年03月21日 01:33, Daniel P. Berrange wrote:
> 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;
>
Looks fine, ACK
More information about the libvir-list
mailing list