Signed-off-by: Martin Milata <mmilata(a)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);
--
1.8.3.1