diff options
author | Guannan Ren <gren@redhat.com> | 2012-10-12 21:24:47 +0800 |
---|---|---|
committer | Jiri Denemark <jdenemar@redhat.com> | 2012-10-12 17:01:07 +0200 |
commit | cd4d093eef4a3a5ff7e2df436ba52501186634ec (patch) | |
tree | dc693c5e697fc1148afa579e635b81211838d1b7 /typewrappers.c | |
parent | 48e9333bec0e96b667ba5a17093ac4aeef3491a3 (diff) | |
download | libvirt-python-v6-cd4d093eef4a3a5ff7e2df436ba52501186634ec.tar.gz libvirt-python-v6-cd4d093eef4a3a5ff7e2df436ba52501186634ec.tar.xz libvirt-python-v6-cd4d093eef4a3a5ff7e2df436ba52501186634ec.zip |
python: keep consistent handling of Python integer conversion
Resolve BZ:https://bugzilla.redhat.com/show_bug.cgi?id=816609
(cherry picked from commit 283f1c4aef8736d61c3965874a837537fea05dbc)
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.
Diffstat (limited to 'typewrappers.c')
-rw-r--r-- | typewrappers.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/typewrappers.c b/typewrappers.c index c525e59..76400a6 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -200,12 +200,16 @@ 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 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; |