chiark / gitweb /
macro: introduce nice macro for disabling -Wmissing-prototypes warnigs
[elogind.git] / src / python-systemd / _journal.c
index ced52b2f5283369fbe366e9a72b89257d5331f52..cbc661d837ad45c6786c2826dd465161547ba6e1 100644 (file)
@@ -22,6 +22,7 @@
 #include <Python.h>
 
 #include <alloca.h>
 #include <Python.h>
 
 #include <alloca.h>
+#include "util.h"
 
 #define SD_JOURNAL_SUPPRESS_LOCATION
 #include <systemd/sd-journal.h>
 
 #define SD_JOURNAL_SUPPRESS_LOCATION
 #include <systemd/sd-journal.h>
@@ -40,8 +41,7 @@ static PyObject *journal_sendv(PyObject *self, PyObject *args) {
 
         /* Allocate an array for the argument strings */
         argc = PyTuple_Size(args);
 
         /* Allocate an array for the argument strings */
         argc = PyTuple_Size(args);
-        encoded = alloca(argc * sizeof(PyObject*));
-        memset(encoded, 0, argc * sizeof(PyObject*));
+        encoded = alloca0(argc * sizeof(PyObject*));
 
         /* Allocate sufficient iovector space for the arguments. */
         iov = alloca(argc * sizeof(struct iovec));
 
         /* Allocate sufficient iovector space for the arguments. */
         iov = alloca(argc * sizeof(struct iovec));
@@ -113,14 +113,19 @@ static PyMethodDef methods[] = {
         { NULL, NULL, 0, NULL }        /* Sentinel */
 };
 
         { NULL, NULL, 0, NULL }        /* Sentinel */
 };
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wmissing-prototypes"
-
 #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
 
@@ -128,14 +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
-
-#pragma GCC diagnostic pop