}
if ($actual_ctype->{TYPE} eq "SCALAR" and $actual_ctype->{NAME} eq "string_array") {
- $self->pidl("$target = pytalloc_get_ptr($cvar);");
+ $self->pidl("$target = pyrpc_string_array_from_PyList($mem_ctx, $cvar, \"$target\");");
return;
}
# Not yet supported
if ($ctypename eq "string_array") {
- return "pytalloc_GenericObject_reference_ex($mem_ctx, $cvar)";
+ return "pyrpc_string_array_to_PyList($cvar)";
}
if ($ctypename eq "ipv4address") { return "PyString_FromStringOrNULL($cvar)"; }
if ($ctypename eq "ipv6address") { return "PyString_FromStringOrNULL($cvar)"; }
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)
{
PyObject *PyString_FromStringOrNULL(const char *str);
+const char **pyrpc_string_array_from_PyList(TALLOC_CTX *mem_ctx, PyObject *list,
+ const char *debug_name);
+PyObject *pyrpc_string_array_to_PyList(const char **string_array);
+
PyObject *pyrpc_import_union(PyTypeObject *type, TALLOC_CTX *mem_ctx, int level,
const void *in, const char *typename);
void *pyrpc_export_union(PyTypeObject *type, TALLOC_CTX *mem_ctx, int level,