On 03/21/2012 01:35 AM, Guannan Ren wrote:
> will become:
> if (PyBool_Check(value)) {
Why do we have to require a PyBool? My reading of PyObject_IsTrue is
that it can convert other python objects to a boolean truth value, which
is more flexible.
> temp->value.b = PyObject_IsTrue(value) ? 1 : 0;
PyObject_IsTrue is tri-state; it can return failure. You don't want to
map failure to true.
> } else {
> PyErr_Format(PyExc_TypeError,
> "The value type of "
> "attribute \"%s\" must be bool", keystr);
> goto cleanup;
> }
Maybe we need a wrapper:
int libvirt_boolUnwrap(PyObject *obj, bool *value) {
int ret = PyObject_IsTrue(obj);
if (ret < 0)
return ret;
*value = ret > 0;
return 0;
}
and then callers become:
if (libvirt_boolUnwrap(value, &temp->value.b) < 0)
goto cleanup;
--
Eric Blake [email protected] +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
