chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sd-dhcp6-lease: Revise address iteration functions
[elogind.git]
/
src
/
python-systemd
/
_journal.c
diff --git
a/src/python-systemd/_journal.c
b/src/python-systemd/_journal.c
index c305b77ce298aefb276ebbf9fecd6144bfdcf087..456e4a2796bbad2bd8ece51cfeaa033fe0460b2d 100644
(file)
--- a/
src/python-systemd/_journal.c
+++ b/
src/python-systemd/_journal.c
@@
-3,7
+3,7
@@
/***
This file is part of systemd.
/***
This file is part of systemd.
- Copyright 2012 David Strauss
+ Copyright 2012 David Strauss
<david@davidstrauss.net>
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
@@
-21,8
+21,11
@@
#include <Python.h>
#include <Python.h>
+#include <alloca.h>
+#include "util.h"
+
#define SD_JOURNAL_SUPPRESS_LOCATION
#define SD_JOURNAL_SUPPRESS_LOCATION
-#include
<systemd/sd-journal.h>
+#include
"systemd/sd-journal.h"
PyDoc_STRVAR(journal_sendv__doc__,
"sendv('FIELD=value', 'FIELD=value', ...) -> None\n\n"
PyDoc_STRVAR(journal_sendv__doc__,
"sendv('FIELD=value', 'FIELD=value', ...) -> None\n\n"
@@
-36,20
+39,12
@@
static PyObject *journal_sendv(PyObject *self, PyObject *args) {
PyObject *ret = NULL;
PyObject **encoded;
PyObject *ret = NULL;
PyObject **encoded;
+ /* Allocate an array for the argument strings */
argc = PyTuple_Size(args);
argc = PyTuple_Size(args);
-
- encoded = calloc(argc, sizeof(PyObject*));
- if (!encoded) {
- ret = PyErr_NoMemory();
- goto out1;
- }
+ encoded = alloca0(argc * sizeof(PyObject*));
/* Allocate sufficient iovector space for the arguments. */
/* Allocate sufficient iovector space for the arguments. */
- iov = malloc(argc * sizeof(struct iovec));
- if (!iov) {
- ret = PyErr_NoMemory();
- goto out;
- }
+ iov = alloca(argc * sizeof(struct iovec));
/* Iterate through the Python arguments and fill the iovector. */
for (i = 0; i < argc; ++i) {
/* Iterate through the Python arguments and fill the iovector. */
for (i = 0; i < argc; ++i) {
@@
-70,17
+65,11
@@
static PyObject *journal_sendv(PyObject *self, PyObject *args) {
iov[i].iov_len = length;
}
iov[i].iov_len = length;
}
- /* Clear errno, because sd_journal_sendv will not set it by
- itself, unless an error occurs in one of the system calls. */
- errno = 0;
-
/* Send the iovector to the journal. */
r = sd_journal_sendv(iov, argc);
/* Send the iovector to the journal. */
r = sd_journal_sendv(iov, argc);
- if (r) {
- if (errno)
- PyErr_SetFromErrno(PyExc_IOError);
- else
- PyErr_SetString(PyExc_ValueError, "invalid message format");
+ if (r < 0) {
+ errno = -r;
+ PyErr_SetFromErrno(PyExc_IOError);
goto out;
}
goto out;
}
@@
-92,13
+81,6
@@
out:
for (i = 0; i < argc; ++i)
Py_XDECREF(encoded[i]);
for (i = 0; i < argc; ++i)
Py_XDECREF(encoded[i]);
- free(encoded);
-
-out1:
- /* Free the iovector. The actual strings
- are already managed by Python. */
- free(iov);
-
return ret;
}
return ret;
}
@@
-117,8
+99,10
@@
static PyObject* journal_stream_fd(PyObject *self, PyObject *args) {
return NULL;
fd = sd_journal_stream_fd(identifier, priority, level_prefix);
return NULL;
fd = sd_journal_stream_fd(identifier, priority, level_prefix);
- if (fd < 0)
+ if (fd < 0) {
+ errno = -fd;
return PyErr_SetFromErrno(PyExc_IOError);
return PyErr_SetFromErrno(PyExc_IOError);
+ }
return PyLong_FromLong(fd);
}
return PyLong_FromLong(fd);
}
@@
-131,9
+115,17
@@
static PyMethodDef methods[] = {
#if PY_MAJOR_VERSION < 3
#if PY_MAJOR_VERSION < 3
+DISABLE_WARNING_MISSING_PROTOTYPES;
PyMODINIT_FUNC init_journal(void) {
PyMODINIT_FUNC init_journal(void) {
- (void) Py_InitModule("_journal", methods);
+ PyObject *m;
+
+ m = Py_InitModule("_journal", methods);
+ if (m == NULL)
+ return;
+
+ PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION);
}
}
+REENABLE_WARNING;
#else
#else
@@
-141,12
+133,25
@@
static struct PyModuleDef module = {
PyModuleDef_HEAD_INIT,
"_journal", /* name of module */
NULL, /* module documentation, may be NULL */
PyModuleDef_HEAD_INIT,
"_journal", /* name of module */
NULL, /* module documentation, may be NULL */
-
0
, /* size of per-interpreter state of the module */
+
-1
, /* size of per-interpreter state of the module */
methods
};
methods
};
+DISABLE_WARNING_MISSING_PROTOTYPES;
PyMODINIT_FUNC PyInit__journal(void) {
PyMODINIT_FUNC PyInit__journal(void) {
- return PyModule_Create(&module);
+ PyObject *m;
+
+ m = PyModule_Create(&module);
+ if (m == NULL)
+ return NULL;
+
+ if (PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {
+ Py_DECREF(m);
+ return NULL;
+ }
+
+ return m;
}
}
+REENABLE_WARNING;
#endif
#endif