mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06: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:
parent
2832663f59
commit
283f1c4aef
@ -220,7 +220,7 @@ libvirt_ulongUnwrap(PyObject *obj, unsigned long *val)
|
|||||||
int
|
int
|
||||||
libvirt_longlongUnwrap(PyObject *obj, long long *val)
|
libvirt_longlongUnwrap(PyObject *obj, long long *val)
|
||||||
{
|
{
|
||||||
long long llong_val;
|
long long llong_val = -1;
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
PyErr_SetString(PyExc_TypeError, "unexpected type");
|
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
|
/* If obj is of PyInt_Type, PyLong_AsLongLong
|
||||||
* will call PyInt_AsLong() to handle it automatically.
|
* will call PyInt_AsLong() to handle it automatically.
|
||||||
*/
|
*/
|
||||||
|
if (PyInt_Check(obj) || PyLong_Check(obj))
|
||||||
llong_val = PyLong_AsLongLong(obj);
|
llong_val = PyLong_AsLongLong(obj);
|
||||||
|
else
|
||||||
|
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||||
|
|
||||||
if ((llong_val == -1) && PyErr_Occurred())
|
if ((llong_val == -1) && PyErr_Occurred())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user