chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gpt-auto-generator: include device name in error reports
[elogind.git]
/
src
/
python-systemd
/
_reader.c
diff --git
a/src/python-systemd/_reader.c
b/src/python-systemd/_reader.c
index 98a99aa0ab0c6f0b836e8902c19cc874bf5a5116..bc5db19049577d079bba9db08bd3269d2d164597 100644
(file)
--- a/
src/python-systemd/_reader.c
+++ b/
src/python-systemd/_reader.c
@@
-64,6
+64,10
@@
static PyStructSequence_Desc Monotonic_desc = {
};
#endif
};
#endif
+/**
+ * Convert a Python sequence object into a strv (char**), and
+ * None into a NULL pointer.
+ */
static int strv_converter(PyObject* obj, void *_result) {
char ***result = _result;
Py_ssize_t i, len;
static int strv_converter(PyObject* obj, void *_result) {
char ***result = _result;
Py_ssize_t i, len;
@@
-71,13
+75,22
@@
static int strv_converter(PyObject* obj, void *_result) {
assert(result);
if (!obj)
assert(result);
if (!obj)
- goto cleanup;
+ return 0;
+
+ if (obj == Py_None) {
+ *result = NULL;
+ return 1;
+ }
if (!PySequence_Check(obj))
return 0;
len = PySequence_Length(obj);
*result = new0(char*, len + 1);
if (!PySequence_Check(obj))
return 0;
len = PySequence_Length(obj);
*result = new0(char*, len + 1);
+ if (!*result) {
+ set_error(-ENOMEM, NULL, NULL);
+ return 0;
+ }
for (i = 0; i < len; i++) {
PyObject *item;
for (i = 0; i < len; i++) {
PyObject *item;
@@
-145,7
+158,7
@@
static int Reader_init(Reader *self, PyObject *args, PyObject *keywds)
char **files = NULL;
static const char* const kwlist[] = {"flags", "path", "files", NULL};
char **files = NULL;
static const char* const kwlist[] = {"flags", "path", "files", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "|izO&", (char**) kwlist,
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|izO&
:__init__
", (char**) kwlist,
&flags, &path, strv_converter, &files))
return -1;
&flags, &path, strv_converter, &files))
return -1;
@@
-908,9
+921,9
@@
static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
r = sd_journal_get_data(self->j, "MESSAGE_ID", &mid, &mid_len);
if (r == 0) {
r = sd_journal_get_data(self->j, "MESSAGE_ID", &mid, &mid_len);
if (r == 0) {
- const
in
t l = sizeof("MESSAGE_ID");
+ const
size_
t l = sizeof("MESSAGE_ID");
assert(mid_len > l);
assert(mid_len > l);
- PyErr_Format(PyExc_KeyError, "%.*s", (int)
mid_len - l
,
+ PyErr_Format(PyExc_KeyError, "%.*s", (int)
(mid_len - l)
,
(const char*) mid + l);
} else if (r == -ENOENT)
PyErr_SetString(PyExc_IndexError, "no MESSAGE_ID field");
(const char*) mid + l);
} else if (r == -ENOENT)
PyErr_SetString(PyExc_IndexError, "no MESSAGE_ID field");