diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-03-20 19:00:37 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-03-21 22:39:24 -0400 |
commit | 1cdcd71be06a7f51012766d6b2f9e828b715f5e7 (patch) | |
tree | d971a997658137c800706de616e46a241eb81756 /src/python-systemd/_reader.c | |
parent | 806bc1cb610b1795d62f59878703361c8b576b12 (diff) |
systemd-python: implement _Reader.test_cursor
Getting the cursor is split out from .get_next() into
.get_cursor(). This mirrors the C API more closely, and
also makes things a bit faster if the cursor is not needed.
Diffstat (limited to 'src/python-systemd/_reader.c')
-rw-r--r-- | src/python-systemd/_reader.c | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c index 4fe7847616..b74d2beab9 100644 --- a/src/python-systemd/_reader.c +++ b/src/python-systemd/_reader.c @@ -374,26 +374,6 @@ static PyObject* Reader_get_next(Reader *self, PyObject *args) goto error; } - { - PyObject _cleanup_Py_DECREF_ *key = NULL, *value = NULL; - char _cleanup_free_ *cursor = NULL; - - r = sd_journal_get_cursor(self->j, &cursor); - if (set_error(r, NULL, NULL)) - goto error; - - key = unicode_FromString("__CURSOR"); - if (!key) - goto error; - - value = PyBytes_FromString(cursor); - if (!value) - goto error; - - if (PyDict_SetItem(dict, key, value)) - goto error; - } - return dict; error: Py_DECREF(dict); @@ -602,6 +582,50 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args) } +PyDoc_STRVAR(Reader_get_cursor__doc__, + "get_cursor() -> str\n\n" + "Return a cursor string for the current journal entry.\n\n" + "Wraps sd_journal_get_cursor(). See man:sd_journal_get_cursor(3)."); +static PyObject* Reader_get_cursor(Reader *self, PyObject *args) +{ + char _cleanup_free_ *cursor = NULL; + int r; + + assert(self); + assert(!args); + + r = sd_journal_get_cursor(self->j, &cursor); + if (set_error(r, NULL, NULL)) + return NULL; + + return unicode_FromString(cursor); +} + + +PyDoc_STRVAR(Reader_test_cursor__doc__, + "test_cursor(str) -> bool\n\n" + "Test whether the cursor string matches current journal entry.\n\n" + "Wraps sd_journal_test_cursor(). See man:sd_journal_test_cursor(3)."); +static PyObject* Reader_test_cursor(Reader *self, PyObject *args) +{ + const char *cursor; + int r; + + assert(self); + assert(args); + + if (!PyArg_ParseTuple(args, "s:_Reader.get_cursor", &cursor)) + return NULL; + + r = sd_journal_test_cursor(self->j, cursor); + set_error(r, NULL, NULL); + if (r < 0) + return NULL; + + return PyBool_FromLong(r); +} + + static PyObject* Reader_iter(PyObject *self) { Py_INCREF(self); @@ -792,6 +816,8 @@ static PyMethodDef Reader_methods[] = { {"seek_monotonic", (PyCFunction) Reader_seek_monotonic, METH_VARARGS, Reader_seek_monotonic__doc__}, {"wait", (PyCFunction) Reader_wait, METH_VARARGS, Reader_wait__doc__}, {"seek_cursor", (PyCFunction) Reader_seek_cursor, METH_VARARGS, Reader_seek_cursor__doc__}, + {"get_cursor", (PyCFunction) Reader_get_cursor, METH_NOARGS, Reader_get_cursor__doc__}, + {"test_cursor", (PyCFunction) Reader_test_cursor, METH_VARARGS, Reader_test_cursor__doc__}, {"query_unique", (PyCFunction) Reader_query_unique, METH_VARARGS, Reader_query_unique__doc__}, {"get_catalog", (PyCFunction) Reader_get_catalog, METH_NOARGS, Reader_get_catalog__doc__}, {NULL} /* Sentinel */ |