From: Tomas Mlcoch Date: Wed, 8 May 2013 11:41:10 +0000 (+0200) Subject: py: Fix num type conversion in repomd record setters. X-Git-Tag: upstream/0.2.1~218 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=238d6159dc719ae49dc3edf4a642675ba16bb2f7;p=services%2Fcreaterepo_c.git py: Fix num type conversion in repomd record setters. --- diff --git a/src/python/repomd-py.c b/src/python/repomd-py.c index 2c564bb..4461b87 100644 --- a/src/python/repomd-py.c +++ b/src/python/repomd-py.c @@ -75,6 +75,7 @@ repomd_init(_RepomdObject *self, PyObject *args, PyObject *kwds) PyErr_SetString(CrErr_Exception, "Repomd initialization failed"); return -1; } + return 0; } diff --git a/src/python/repomdrecord-py.c b/src/python/repomdrecord-py.c index dae0ba9..aa2afd5 100644 --- a/src/python/repomdrecord-py.c +++ b/src/python/repomdrecord-py.c @@ -160,12 +160,22 @@ static struct PyMethodDef repomdrecord_methods[] = { #define OFFSET(member) (void *) offsetof(struct _cr_RepomdRecord, member) static PyObject * -get_num(_RepomdRecordObject *self, void *member_offset) +get_long(_RepomdRecordObject *self, void *member_offset) { if (check_RepomdRecordStatus(self)) return NULL; cr_RepomdRecord rec = self->record; - gint64 val = *((gint64 *) ((size_t)rec + (size_t) member_offset)); + gint64 val = *((long *) ((size_t)rec + (size_t) member_offset)); + return PyLong_FromLongLong((long long) val); +} + +static PyObject * +get_int(_RepomdRecordObject *self, void *member_offset) +{ + if (check_RepomdRecordStatus(self)) + return NULL; + cr_RepomdRecord rec = self->record; + gint64 val = *((int *) ((size_t)rec + (size_t) member_offset)); return PyLong_FromLongLong((long long) val); } @@ -182,7 +192,7 @@ get_str(_RepomdRecordObject *self, void *member_offset) } static int -set_num(_RepomdRecordObject *self, PyObject *value, void *member_offset) +set_long(_RepomdRecordObject *self, PyObject *value, void *member_offset) { long val; if (check_RepomdRecordStatus(self)) @@ -201,6 +211,24 @@ set_num(_RepomdRecordObject *self, PyObject *value, void *member_offset) } static int +set_int(_RepomdRecordObject *self, PyObject *value, void *member_offset) +{ + long val; + if (check_RepomdRecordStatus(self)) + return -1; + if (PyLong_Check(value)) { + val = PyLong_AsLong(value); + } else if (PyInt_Check(value)) { + val = PyInt_AS_LONG(value); + } else { + PyErr_SetString(PyExc_ValueError, "Number expected!"); + return -1; + } + cr_RepomdRecord rec = self->record; + *((int *) ((size_t) rec + (size_t) member_offset)) = (int) val; + return 0; +} +static int set_str(_RepomdRecordObject *self, PyObject *value, void *member_offset) { if (check_RepomdRecordStatus(self)) @@ -222,10 +250,10 @@ static PyGetSetDef repomdrecord_getsetters[] = { {"checksum_type", (getter)get_str, (setter)set_str, NULL, OFFSET(checksum_type)}, {"checksum_open", (getter)get_str, (setter)set_str, NULL, OFFSET(checksum_open)}, {"checksum_open_type", (getter)get_str, (setter)set_str, NULL, OFFSET(checksum_open_type)}, - {"timestamp", (getter)get_num, (setter)set_num, NULL, OFFSET(timestamp)}, - {"size", (getter)get_num, (setter)set_num, NULL, OFFSET(size)}, - {"size_open", (getter)get_num, (setter)set_num, NULL, OFFSET(size_open)}, - {"db_ver", (getter)get_num, (setter)set_num, NULL, OFFSET(db_ver)}, + {"timestamp", (getter)get_long, (setter)set_long, NULL, OFFSET(timestamp)}, + {"size", (getter)get_long, (setter)set_long, NULL, OFFSET(size)}, + {"size_open", (getter)get_long, (setter)set_long, NULL, OFFSET(size_open)}, + {"db_ver", (getter)get_int, (setter)set_int, NULL, OFFSET(db_ver)}, {NULL, NULL, NULL, NULL, NULL} /* sentinel */ };