[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