chiark / gitweb /
systemd-python: wrap sd_notify
[elogind.git] / src / python-systemd / id128.c
index f82b0afb9900766eb92affe5005fc817c792001e..ec1d9fb4a2b530d6d7929bd0cf07356c40219108 100644 (file)
 
 #include <systemd/sd-messages.h>
 
-#define _cleanup_Py_DECREF_ __attribute__((cleanup(cleanup_Py_DECREFp)))
-
-static void cleanup_Py_DECREFp(PyObject **p) {
-        if (!*p)
-                return;
-
-        Py_DECREF(*p);
-}
+#include "pyutil.h"
 
 PyDoc_STRVAR(module__doc__,
              "Python interface to the libsystemd-id128 library.\n\n"
              "Provides SD_MESSAGE_* constants and functions to query and generate\n"
-             "128bit unique identifiers."
+             "128-bit unique identifiers."
 );
 
 PyDoc_STRVAR(randomize__doc__,
              "randomize() -> UUID\n\n"
-             "Return a new random 128bit unique identifier.\n"
+             "Return a new random 128-bit unique identifier.\n"
              "Wraps sd_id128_randomize(3)."
 );
 
 PyDoc_STRVAR(get_machine__doc__,
              "get_machine() -> UUID\n\n"
-             "Return a 128bit unique identifier for this machine.\n"
+             "Return a 128-bit unique identifier for this machine.\n"
              "Wraps sd_id128_get_machine(3)."
 );
 
 PyDoc_STRVAR(get_boot__doc__,
              "get_boot() -> UUID\n\n"
-             "Return a 128bit unique identifier for this boot.\n"
+             "Return a 128-bit unique identifier for this boot.\n"
              "Wraps sd_id128_get_boot(3)."
 );
 
 static PyObject* make_uuid(sd_id128_t id) {
-        PyObject _cleanup_Py_DECREF_
+        _cleanup_Py_DECREF_ PyObject
                 *uuid = NULL, *UUID = NULL, *bytes = NULL,
-                *args = NULL, *kwargs = NULL, *obj = NULL;
+                *args = NULL, *kwargs = NULL;
 
         uuid = PyImport_ImportModule("uuid");
         if (!uuid)
@@ -106,13 +99,13 @@ static PyMethodDef methods[] = {
 };
 
 static int add_id(PyObject *module, const char* name, sd_id128_t id) {
-        PyObject _cleanup_Py_DECREF_ *obj;
+        PyObject *obj;
 
         obj = make_uuid(id);
         if (!obj)
                 return -1;
 
-        return PyObject_SetAttrString(module, name, obj);
+        return PyModule_AddObject(module, name, obj);
 }
 
 #pragma GCC diagnostic push
@@ -127,7 +120,11 @@ PyMODINIT_FUNC initid128(void) {
         if (m == NULL)
                 return;
 
+        /* a series of lines like 'add_id() ;' follow */
+#define JOINER ;
 #include "id128-constants.h"
+#undef JOINER
+        PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION);
 }
 
 #else
@@ -136,7 +133,7 @@ static struct PyModuleDef module = {
         PyModuleDef_HEAD_INIT,
         "id128", /* name of module */
         module__doc__, /* module documentation, may be NULL */
-        0, /* size of per-interpreter state of the module */
+        -1, /* size of per-interpreter state of the module */
         methods
 };
 
@@ -147,7 +144,14 @@ PyMODINIT_FUNC PyInit_id128(void) {
         if (m == NULL)
                 return NULL;
 
+        if ( /* a series of lines like 'add_id() ||' follow */
+#define JOINER ||
 #include "id128-constants.h"
+#undef JOINER
+            PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {
+                Py_DECREF(m);
+                return NULL;
+        }
 
         return m;
 }