ping
On 02/07/2018 05:49 PM, Edgar Kaziakhmedov wrote:
> Predefine hints for all parameters possible to avoid wrong type
> convert.
>
> Signed-off-by: Edgar Kaziakhmedov <edgar.kaziakhmedov(a)virtuozzo.com>
> ---
> libvirt-override.c | 128
> +++++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 124 insertions(+), 4 deletions(-)
>
> diff --git a/libvirt-override.c b/libvirt-override.c
> index 78a7f08..dba42d4 100644
> --- a/libvirt-override.c
> +++ b/libvirt-override.c
> @@ -7750,7 +7750,9 @@ libvirt_virDomainMigrate3(PyObject *self
> ATTRIBUTE_UNUSED,
> PyObject *dict;
> unsigned int flags;
> virTypedParameterPtr params;
> - int nparams;
> + virPyTypedParamsHintPtr hparams;
> + int nparams = 0;
> + int nhparams = 15;
> virDomainPtr ddom = NULL;
>
> if (!PyArg_ParseTuple(args, (char *) "OOOI:virDomainMigrate3",
> @@ -7760,14 +7762,64 @@ libvirt_virDomainMigrate3(PyObject *self
> ATTRIBUTE_UNUSED,
> domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
> dconn = (virConnectPtr) PyvirConnect_Get(pyobj_dconn);
>
> - if (virPyDictToTypedParams(dict, ¶ms, &nparams, NULL, 0) < 0)
> + hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams);
> + hparams[0].name = VIR_MIGRATE_PARAM_URI;
> + hparams[0].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[1].name = VIR_MIGRATE_PARAM_DEST_NAME;
> + hparams[1].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[2].name = VIR_MIGRATE_PARAM_DEST_XML;
> + hparams[2].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[3].name = VIR_MIGRATE_PARAM_GRAPHICS_URI;
> + hparams[3].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[4].name = VIR_MIGRATE_PARAM_BANDWIDTH;
> + hparams[4].type = VIR_TYPED_PARAM_ULLONG;
> +
> + hparams[5].name = VIR_MIGRATE_PARAM_LISTEN_ADDRESS;
> + hparams[5].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[6].name = VIR_MIGRATE_PARAM_DISKS_PORT;
> + hparams[6].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[7].name = VIR_MIGRATE_PARAM_COMPRESSION;
> + hparams[7].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[8].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS;
> + hparams[8].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[9].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL;
> + hparams[9].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[10].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS;
> + hparams[10].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[11].name = VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE;
> + hparams[11].type = VIR_TYPED_PARAM_ULLONG;
> +
> + hparams[12].name = VIR_MIGRATE_PARAM_PERSIST_XML;
> + hparams[12].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[13].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL;
> + hparams[13].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[14].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT;
> + hparams[14].type = VIR_TYPED_PARAM_INT;
> +
> + if (virPyDictToTypedParams(dict, ¶ms, &nparams,
> + hparams, nhparams) < 0) {
> + free(hparams);
> return NULL;
> + }
>
> LIBVIRT_BEGIN_ALLOW_THREADS;
> ddom = virDomainMigrate3(domain, dconn, params, nparams, flags);
> LIBVIRT_END_ALLOW_THREADS;
>
> virTypedParamsFree(params, nparams);
> + free(hparams);
> return libvirt_virDomainPtrWrap(ddom);
> }
>
> @@ -7781,7 +7833,9 @@ libvirt_virDomainMigrateToURI3(PyObject *self
> ATTRIBUTE_UNUSED,
> PyObject *dict;
> unsigned int flags;
> virTypedParameterPtr params;
> + virPyTypedParamsHintPtr hparams;
> int nparams;
> + int nhparams = 15;
> int ret = -1;
>
> if (!PyArg_ParseTuple(args, (char *) "OzOI:virDomainMigrate3",
> @@ -7790,14 +7844,64 @@ libvirt_virDomainMigrateToURI3(PyObject *self
> ATTRIBUTE_UNUSED,
>
> domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
>
> - if (virPyDictToTypedParams(dict, ¶ms, &nparams, NULL, 0) < 0)
> + hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams);
> + hparams[0].name = VIR_MIGRATE_PARAM_URI;
> + hparams[0].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[1].name = VIR_MIGRATE_PARAM_DEST_NAME;
> + hparams[1].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[2].name = VIR_MIGRATE_PARAM_DEST_XML;
> + hparams[2].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[3].name = VIR_MIGRATE_PARAM_GRAPHICS_URI;
> + hparams[3].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[4].name = VIR_MIGRATE_PARAM_BANDWIDTH;
> + hparams[4].type = VIR_TYPED_PARAM_ULLONG;
> +
> + hparams[5].name = VIR_MIGRATE_PARAM_LISTEN_ADDRESS;
> + hparams[5].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[6].name = VIR_MIGRATE_PARAM_DISKS_PORT;
> + hparams[6].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[7].name = VIR_MIGRATE_PARAM_COMPRESSION;
> + hparams[7].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[8].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS;
> + hparams[8].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[9].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL;
> + hparams[9].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[10].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS;
> + hparams[10].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[11].name = VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE;
> + hparams[11].type = VIR_TYPED_PARAM_ULLONG;
> +
> + hparams[12].name = VIR_MIGRATE_PARAM_PERSIST_XML;
> + hparams[12].type = VIR_TYPED_PARAM_STRING;
> +
> + hparams[13].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL;
> + hparams[13].type = VIR_TYPED_PARAM_INT;
> +
> + hparams[14].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT;
> + hparams[14].type = VIR_TYPED_PARAM_INT;
> +
> + if (virPyDictToTypedParams(dict, ¶ms, &nparams,
> + hparams, nhparams) < 0) {
> + free(hparams);
> return NULL;
> + }
>
> LIBVIRT_BEGIN_ALLOW_THREADS;
> ret = virDomainMigrateToURI3(domain, dconnuri, params, nparams,
> flags);
> LIBVIRT_END_ALLOW_THREADS;
>
> virTypedParamsFree(params, nparams);
> + free(hparams);
> return libvirt_intWrap(ret);
> }
> #endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */
> @@ -8650,7 +8754,9 @@ libvirt_virDomainBlockCopy(PyObject *self
> ATTRIBUTE_UNUSED,
> char *disk = NULL;
> char *destxml = NULL;
> virTypedParameterPtr params = NULL;
> + virPyTypedParamsHintPtr hparams;
> int nparams = 0;
> + int nhparams = 3;
> unsigned int flags = 0;
> int c_retval;
>
> @@ -8659,8 +8765,22 @@ libvirt_virDomainBlockCopy(PyObject *self
> ATTRIBUTE_UNUSED,
> return NULL;
>
> if (PyDict_Check(pyobj_dict)) {
> - if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams,
> NULL, 0) < 0)
> + hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams);
> + hparams[0].name = VIR_DOMAIN_BLOCK_COPY_BANDWIDTH;
> + hparams[0].type = VIR_TYPED_PARAM_ULLONG;
> +
> + hparams[1].name = VIR_DOMAIN_BLOCK_COPY_GRANULARITY;
> + hparams[1].type = VIR_TYPED_PARAM_UINT;
> +
> + hparams[2].name = VIR_DOMAIN_BLOCK_COPY_BUF_SIZE;
> + hparams[2].type = VIR_TYPED_PARAM_UINT;
> +
> + if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams,
> + hparams, nhparams) < 0) {
> + free(hparams);
> return NULL;
> + }
> + free(hparams);
> }
>
> dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom);
> --
> 2.11.0
>
> --
> libvir-list mailing list
> libvir-list(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/libvir-list
> .
>
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
.