From d10e50bebbfecbde5000eedc5c38bba07f44477d Mon Sep 17 00:00:00 2001 From: Tomas Mlcoch Date: Tue, 4 Jun 2013 14:54:34 +0200 Subject: [PATCH] python: Support for None in set_str func. --- src/python/package-py.c | 11 +++++++++-- src/python/repomdrecord-py.c | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/python/package-py.c b/src/python/package-py.c index 56d5403..c641bbc 100644 --- a/src/python/package-py.c +++ b/src/python/package-py.c @@ -335,12 +335,19 @@ set_str(_PackageObject *self, PyObject *value, void *member_offset) { if (check_PackageStatus(self)) return -1; - if (!PyString_Check(value)) { - PyErr_SetString(PyExc_ValueError, "String expected!"); + if (!PyString_Check(value) && value != Py_None) { + PyErr_SetString(PyExc_ValueError, "String or None expected!"); return -1; } cr_Package *pkg = self->package; + if (value == Py_None) { + // If value is None exist right now (avoid possibly + // creation of a string chunk) + *((char **) ((size_t) pkg + (size_t) member_offset)) = NULL; + return 0; + } + // Check if chunk exits // If it doesn't - this is package from loaded metadata and all its // strings are in a metadata common chunk (cr_Metadata->chunk). diff --git a/src/python/repomdrecord-py.c b/src/python/repomdrecord-py.c index 9f60cac..57d5bc9 100644 --- a/src/python/repomdrecord-py.c +++ b/src/python/repomdrecord-py.c @@ -293,12 +293,13 @@ set_str(_RepomdRecordObject *self, PyObject *value, void *member_offset) { if (check_RepomdRecordStatus(self)) return -1; - if (!PyString_Check(value)) { - PyErr_SetString(PyExc_ValueError, "String expected!"); + if (!PyString_Check(value) && value != Py_None) { + PyErr_SetString(PyExc_ValueError, "String or None expected!"); return -1; } cr_RepomdRecord *rec = self->record; - char *str = g_string_chunk_insert(rec->chunk, PyString_AsString(value)); + char *str = cr_safe_string_chunk_insert(rec->chunk, + PyObject_ToStrOrNull(value)); *((char **) ((size_t) rec + (size_t) member_offset)) = str; return 0; } -- 2.7.4