]> jfr.im git - irc/evilnet/x3.git/commitdiff
mod-python: refactor modeList conversion into separate function
authorhstuart <redacted>
Tue, 6 Oct 2009 19:27:32 +0000 (19:27 +0000)
committerhstuart <redacted>
Tue, 6 Oct 2009 19:27:32 +0000 (19:27 +0000)
ChangeLog
src/mod-python.c

index e29004b9c38d8fca417f37488cb25dcd6acd3bbf..5147a520b8c56bf40c6c1b68a65460e24a54f4af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
 /***********************************************************************
 X3 ChangeLog
 
+2009-10-06  Henrik Stuart <evilnet@hstuart.dk>
+
+       * src/mod-python.c: refactor modeList conversion into separate function.
+
 2009-10-06  Henrik Stuart <evilnet@hstuart.dk>
 
        * src/mod-python.c: refactor out common error cleanup logic.
index ac7b2c8252e6db3858aa97b56bc67ed0f57a727d..fd279eea027fae8bf7c144b157620218dd6dbce7 100644 (file)
@@ -470,6 +470,32 @@ emb_get_server(UNUSED_ARG(PyObject* self), PyObject* args) {
     return pyobj_from_server(srv);
 }
 
+static PyObject*
+pyobj_from_modelist(struct modeList* mode) {
+    size_t n;
+    PyObject* tmp;
+    PyObject* retval = PyTuple_New(mode->used);
+
+    if (retval == NULL)
+        return NULL;
+
+    for (n = 0; n < mode->used; ++n) {
+        struct modeNode* mn = mode->list[n];
+        tmp = PyString_FromString(mn->user->nick);
+        if (tmp == NULL) {
+            pyobj_release_tuple(retval, n);
+            return NULL;
+        }
+
+        if (PyTuple_SetItem(retval, n, tmp)) {
+            pyobj_release_tuple(retval, n);
+            return NULL;
+        }
+    }
+
+    return retval;
+}
+
 static PyObject*
 emb_get_channel(UNUSED_ARG(PyObject *self), PyObject *args)
 {
@@ -493,11 +519,7 @@ emb_get_channel(UNUSED_ARG(PyObject *self), PyObject *args)
     }
 
     /* build tuple of nicks in channel */
-    pChannelMembers = PyTuple_New(channel->members.used);
-    for(n=0;n < channel->members.used;n++) {
-        struct modeNode *mn = channel->members.list[n];
-        PyTuple_SetItem(pChannelMembers, n, Py_BuildValue("s", mn->user->nick));
-    }
+    pChannelMembers = pyobj_from_modelist(&channel->members);
 
     /* build tuple of bans */
     pChannelBans = PyTuple_New(channel->banlist.used);