]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/python/network.c
network: Add function to return a reverse pointer for networks
[people/ms/libloc.git] / src / python / network.c
index 3400721271b39e34b7245f2e48d4d11932eee7d6..4bae918f3f06997fd4bde05eacd636eb489c30a3 100644 (file)
@@ -279,6 +279,32 @@ static PyObject* Network_richcompare(NetworkObject* self, PyObject* other, int o
        Py_RETURN_NOTIMPLEMENTED;
 }
 
+static PyObject* Network_reverse_pointer(NetworkObject* self, PyObject* args, PyObject* kwargs) {
+       char* kwlist[] = { "suffix", NULL };
+       const char* suffix = NULL;
+       char* rp = NULL;
+
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|z", kwlist, &suffix))
+               return NULL;
+
+       rp = loc_network_reverse_pointer(self->network, suffix);
+       if (!rp) {
+               switch (errno) {
+                       case ENOTSUP:
+                               Py_RETURN_NONE;
+
+                       default:
+                               PyErr_SetFromErrno(PyExc_OSError);
+                               return NULL;
+               }
+       }
+
+       PyObject* ret = PyUnicode_FromString(rp);
+       free(rp);
+
+       return ret;
+}
+
 static struct PyMethodDef Network_methods[] = {
        {
                "exclude",
@@ -298,6 +324,12 @@ static struct PyMethodDef Network_methods[] = {
                METH_VARARGS,
                NULL,
        },
+       {
+               "reverse_pointer",
+               (PyCFunction)Network_reverse_pointer,
+               METH_VARARGS|METH_KEYWORDS,
+               NULL,
+       },
        {
                "set_flag",
                (PyCFunction)Network_set_flag,