1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-23 21:34:54 +03:00

python: keep consistent handling of Python integer conversion

libvirt_ulonglongUnwrap requires the integer type of python obj.
But libvirt_longlongUnwrap still could handle python obj of
Pyfloat_type which causes the float value to be rounded up
to an integer.

For example
 >>> dom.setSchedulerParameters({'vcpu_quota': 0.88})
 0
libvirt_longlongUnwrap treats 0.88 as a valid value 0

However
 >>> dom.setSchedulerParameters({'cpu_shares': 1000.22})
libvirt_ulonglongUnwrap will throw out an error
"TypeError: an integer is required"

The patch make this consistent.
This commit is contained in:
Guannan Ren 2012-09-28 20:29:03 +08:00
parent 2832663f59
commit 283f1c4aef

View File

@ -220,7 +220,7 @@ libvirt_ulongUnwrap(PyObject *obj, unsigned long *val)
int
libvirt_longlongUnwrap(PyObject *obj, long long *val)
{
long long llong_val;
long long llong_val = -1;
if (!obj) {
PyErr_SetString(PyExc_TypeError, "unexpected type");
@ -230,7 +230,11 @@ libvirt_longlongUnwrap(PyObject *obj, long long *val)
/* If obj is of PyInt_Type, PyLong_AsLongLong
* will call PyInt_AsLong() to handle it automatically.
*/
llong_val = PyLong_AsLongLong(obj);
if (PyInt_Check(obj) || PyLong_Check(obj))
llong_val = PyLong_AsLongLong(obj);
else
PyErr_SetString(PyExc_TypeError, "an integer is required");
if ((llong_val == -1) && PyErr_Occurred())
return -1;