TODO pyrpc_string_array_{from,to}_PyList()
[metze/samba/wip.git] / source4 / librpc / rpc / pyrpc_util.c
index 8d5ec45817fd6357728ae88d55f94c4ceec8d3a8..82d601c5fdc2fd0def3c3061c59083524ba061f7 100644 (file)
@@ -424,6 +424,58 @@ PyObject *PyString_FromStringOrNULL(const char *str)
        return PyStr_FromString(str);
 }
 
+const char **pyrpc_string_array_from_PyList(TALLOC_CTX *mem_ctx, PyObject *list,
+                                           const char *debug_name)
+{
+       const char **ret = NULL;
+       Py_ssize_t i;
+
+       if (!PyList_Check(list)) {
+               PyErr_Format(PyExc_TypeError, "%s is not a list", debug_name);
+               return NULL;
+       }
+
+       ret = talloc_array(NULL, const char *, PyList_Size(list)+1);
+       if (ret == NULL) {
+               PyErr_NoMemory();
+               return NULL;
+       }
+
+       for (i = 0; i < PyList_Size(list); i++) {
+               const char *str = NULL;
+               Py_ssize_t size;
+               PyObject *item = PyList_GetItem(list, i);
+               if (!PyStr_Check(item)) {
+                       PyErr_Format(PyExc_TypeError, "%s should be strings",
+                                    debug_name);
+                       talloc_free(ret);
+                       return NULL;
+               }
+               str = PyStr_AsUTF8AndSize(item, &size);
+               if (str == NULL) {
+                       talloc_free(ret);
+                       return NULL;
+               }
+               ret[i] = talloc_strndup(ret, str, size);
+               if (ret[i] == NULL) {
+                       talloc_free(ret);
+                       PyErr_NoMemory();
+                       return NULL;
+               }
+       }
+
+       ret[i] = NULL;
+       return ret;
+}
+
+PyObject *pyrpc_string_array_to_PyList(const char **string_array)
+{
+       /*
+        * TODO
+        */
+       Py_RETURN_NONE;
+}
+
 PyObject *pyrpc_import_union(PyTypeObject *type, TALLOC_CTX *mem_ctx, int level,
                             const void *in, const char *typename)
 {