#include "pyutil.h"
#include "macro.h"
#include "util.h"
+#include "build.h"
typedef struct {
PyObject_HEAD
return NULL;
SD_JOURNAL_FOREACH_DATA(self->j, msg, msg_len) {
- PyObject _cleanup_Py_DECREF_ *key = NULL, *value = NULL;
+ _cleanup_Py_DECREF_ PyObject *key = NULL, *value = NULL;
r = extract(msg, msg_len, &key, &value);
if (r < 0)
if (r < 0)
goto error;
} else {
- PyObject _cleanup_Py_DECREF_ *tmp_list = PyList_New(0);
+ _cleanup_Py_DECREF_ PyObject *tmp_list = PyList_New(0);
if (!tmp_list)
goto error;
PyDoc_STRVAR(Reader_add_disjunction__doc__,
"add_disjunction() -> None\n\n"
- "Inserts a logical OR between matches added before and afterwards.");
+ "Inserts a logical OR between matches added since previous\n"
+ "add_disjunction() or add_conjunction() and the next\n"
+ "add_disjunction() or add_conjunction().\n\n"
+ "See man:sd_journal_add_disjunction(3) for explanation.");
static PyObject* Reader_add_disjunction(Reader *self, PyObject *args)
{
int r;
}
+PyDoc_STRVAR(Reader_add_conjunction__doc__,
+ "add_conjunction() -> None\n\n"
+ "Inserts a logical AND between matches added since previous\n"
+ "add_disjunction() or add_conjunction() and the next\n"
+ "add_disjunction() or add_conjunction().\n\n"
+ "See man:sd_journal_add_disjunction(3) for explanation.");
+static PyObject* Reader_add_conjunction(Reader *self, PyObject *args)
+{
+ int r;
+ r = sd_journal_add_conjunction(self->j);
+ set_error(r, NULL, NULL);
+ if (r < 0)
+ return NULL;
+ Py_RETURN_NONE;
+}
+
+
PyDoc_STRVAR(Reader_flush_matches__doc__,
"flush_matches() -> None\n\n"
"Clear all current match filters.");
"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;
+ _cleanup_free_ char *cursor = NULL;
int r;
assert(self);
static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
{
int r;
- char _cleanup_free_ *msg = NULL;
+ _cleanup_free_ char *msg = NULL;
assert(self);
assert(!args);
int r;
char *id_ = NULL;
sd_id128_t id;
- char _cleanup_free_ *msg = NULL;
+ _cleanup_free_ char *msg = NULL;
assert(!self);
assert(args);
{"_get_monotonic", (PyCFunction) Reader_get_monotonic, METH_NOARGS, Reader_get_monotonic__doc__},
{"add_match", (PyCFunction) Reader_add_match, METH_VARARGS|METH_KEYWORDS, Reader_add_match__doc__},
{"add_disjunction", (PyCFunction) Reader_add_disjunction, METH_NOARGS, Reader_add_disjunction__doc__},
+ {"add_conjunction", (PyCFunction) Reader_add_conjunction, METH_NOARGS, Reader_add_conjunction__doc__},
{"flush_matches", (PyCFunction) Reader_flush_matches, METH_NOARGS, Reader_flush_matches__doc__},
{"seek_head", (PyCFunction) Reader_seek_head, METH_NOARGS, Reader_seek_head__doc__},
{"seek_tail", (PyCFunction) Reader_seek_tail, METH_NOARGS, Reader_seek_tail__doc__},
PyModule_AddIntConstant(m, "INVALIDATE", SD_JOURNAL_INVALIDATE) ||
PyModule_AddIntConstant(m, "LOCAL_ONLY", SD_JOURNAL_LOCAL_ONLY) ||
PyModule_AddIntConstant(m, "RUNTIME_ONLY", SD_JOURNAL_RUNTIME_ONLY) ||
- PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM_ONLY)) {
+ PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM_ONLY) ||
+ PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {
#if PY_MAJOR_VERSION >= 3
Py_DECREF(m);
return NULL;