On 02/19/2018 01:08 PM, Edgar Kaziakhmedov wrote: > ping ^ 2 > > > On 02/13/2018 11:20 AM, Edgar Kaziakhmedov wrote: >> 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@xxxxxxxxxxxxx> >>> --- >>> 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@xxxxxxxxxx >>> https://www.redhat.com/mailman/listinfo/libvir-list >>> . >>> >> >> -- >> libvir-list mailing list >> libvir-list@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/libvir-list >> . >> > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list