Signed-off-by: Martin Milata mmilata@redhat.com --- python/py_common.c | 34 ++++++++++++++++++++++++++++++++++ python/py_common.h | 7 +++++++ 2 files changed, 41 insertions(+)
diff --git a/python/py_common.c b/python/py_common.c index 66835d0..90a0ccb 100644 --- a/python/py_common.c +++ b/python/py_common.c @@ -62,6 +62,40 @@ sr_py_setter_string(PyObject *self, PyObject *rhs, void *data) }
PyObject * +sr_py_getter_uint16(PyObject *self, void *data) +{ + struct getset_offsets *gsoff = data; + uint16_t num = MEMB_T(uint16_t, MEMB(self, gsoff->c_struct_offset), gsoff->member_offset); + return PyInt_FromLong(num); +} + +int +sr_py_setter_uint16(PyObject *self, PyObject *rhs, void *data) +{ + if (rhs == NULL) + { + PyErr_SetString(PyExc_TypeError, "Cannot delete this attribute."); + return -1; + } + + struct getset_offsets *gsoff = data; + + long newvalue = PyInt_AsLong(rhs); + if (PyErr_Occurred()) + return -1; + + if (newvalue < 0 || newvalue > UINT16_MAX) + { + PyErr_SetString(PyExc_ValueError, "Negative or too large value."); + return -1; + } + + MEMB_T(uint16_t, MEMB(self, gsoff->c_struct_offset), gsoff->member_offset) + = (uint16_t)newvalue; + return 0; +} + +PyObject * sr_py_getter_uint32(PyObject *self, void *data) { struct getset_offsets *gsoff = data; diff --git a/python/py_common.h b/python/py_common.h index 9cc39e7..f64a43a 100644 --- a/python/py_common.h +++ b/python/py_common.h @@ -91,6 +91,10 @@ struct getset_offsets { (char*)name, sr_py_getter_string, sr_py_setter_string, (char*)doc_str, &gsoff_ ## c_member } #define SR_ATTRIBUTE_STRING(c_member, doc_str) SR_ATTRIBUTE_STRING_R(#c_member, c_member, doc_str)
+#define SR_ATTRIBUTE_UINT16_R(name, c_member, doc_str) \ + { (char*)name, sr_py_getter_uint16, sr_py_setter_uint16, (char*)doc_str, &gsoff_ ## c_member } +#define SR_ATTRIBUTE_UINT16(c_member, doc_str) SR_ATTRIBUTE_UINT16_R(#c_member, c_member, doc_str) + #define SR_ATTRIBUTE_UINT32_R(name, c_member, doc_str) \ { (char*)name, sr_py_getter_uint32, sr_py_setter_uint32, (char*)doc_str, &gsoff_ ## c_member } #define SR_ATTRIBUTE_UINT32(c_member, doc_str) SR_ATTRIBUTE_UINT32_R(#c_member, c_member, doc_str) @@ -110,6 +114,9 @@ struct getset_offsets PyObject *sr_py_getter_string(PyObject *self, void *data); int sr_py_setter_string(PyObject *self, PyObject *rhs, void *data);
+PyObject *sr_py_getter_uint16(PyObject *self, void *data); +int sr_py_setter_uint16(PyObject *self, PyObject *rhs, void *data); + PyObject *sr_py_getter_uint32(PyObject *self, void *data); int sr_py_setter_uint32(PyObject *self, PyObject *rhs, void *data);