From bc1ff1600ebb96dad18f797238939c052962fc8b Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 20 Mar 2012 14:11:10 +0000 Subject: [PATCH] Convert drivers over to use virURIPtr for query params 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 Signed-off-by: Daniel P. Berrange --- 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 e57eca2861..39076ccd13 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 67b07b730c..a08ca19f4c 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 63c761b969..81c087e11e 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 ced49b1247..20db0426e0 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 9de966f8f2..bc6fea2089 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 83b568e3d5..0000000000 --- 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 - * - * Utility functions to help parse and assemble query strings. - */ - -#include - -#include -#include -#include - -#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 6a3d79005f..0000000000 --- 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 - * - * 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 943b6c0d24..516cf8f293 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;