#include "pyutil.h"
#include "macro.h"
#include "util.h"
+#include "build.h"
typedef struct {
PyObject_HEAD
} Reader;
static PyTypeObject ReaderType;
-static int set_error(int r, const char* path, const char* invalid_message) {
- if (r >= 0)
- return r;
- if (r == -EINVAL && invalid_message)
- PyErr_SetString(PyExc_ValueError, invalid_message);
- else if (r == -ENOMEM)
- PyErr_SetString(PyExc_MemoryError, "Not enough memory");
- else {
- errno = -r;
- PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
- }
- return -1;
-}
-
PyDoc_STRVAR(module__doc__,
"Class to reads the systemd journal similar to journalctl.");
"Returns a timeout value for usage in poll(), the time since the\n"
"epoch of clock_gettime(2) in microseconds, or None if no timeout\n"
"is necessary.\n\n"
- "The return value must be converted to a relative timeout in \n"
+ "The return value must be converted to a relative timeout in\n"
"milliseconds if it is to be used as an argument for poll().\n"
"See man:sd_journal_get_timeout(3) for further discussion.");
static PyObject* Reader_get_timeout(Reader *self, PyObject *args)
if (r < 0)
return NULL;
- if (t == (uint64_t) -1)
- return PyLong_FromLong(-1);
- else {
- struct timespec ts;
- uint64_t n;
- int msec;
-
- clock_gettime(CLOCK_MONOTONIC, &ts);
- n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
- msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
-
- return PyLong_FromLong(msec);
- }
+ return absolute_timeout(t);
}
"Closes the journal.\n");
static PyObject* Reader___exit__(Reader *self, PyObject *args)
{
- assert(self);
-
- sd_journal_close(self->j);
- self->j = NULL;
- Py_RETURN_NONE;
+ return Reader_close(self, args);
}
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;