forked from OSchip/llvm-project
Add typemaps to handle the transformation of Python list of strings into a 'char const **'. This fixes zephyr's issue with SBTarget::Launch without splitting the API into multiple names
llvm-svn: 220306
This commit is contained in:
parent
256451561c
commit
dd86f33902
|
@ -25,6 +25,23 @@
|
|||
}
|
||||
}
|
||||
|
||||
%typemap(typecheck) char ** {
|
||||
/* Check if is a list */
|
||||
$1 = 1;
|
||||
if (PyList_Check($input)) {
|
||||
int size = PyList_Size($input);
|
||||
int i = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
PyObject *o = PyList_GetItem($input,i);
|
||||
if (!PyString_Check(o)) { $1 = 0; }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$1 = ( ($input == Py_None) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(freearg) char** {
|
||||
free((char *) $1);
|
||||
}
|
||||
|
@ -40,6 +57,63 @@
|
|||
}
|
||||
}
|
||||
|
||||
%typemap(in) char const ** {
|
||||
/* Check if is a list */
|
||||
if (PyList_Check($input)) {
|
||||
int size = PyList_Size($input);
|
||||
int i = 0;
|
||||
$1 = (char **) malloc((size+1) * sizeof(char*));
|
||||
for (i = 0; i < size; i++) {
|
||||
PyObject *o = PyList_GetItem($input,i);
|
||||
if (PyString_Check(o))
|
||||
$1[i] = PyString_AsString(o);
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError,"list must contain strings");
|
||||
free($1);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
$1[i] = 0;
|
||||
} else if ($input == Py_None) {
|
||||
$1 = NULL;
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError,"not a list");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(typecheck) char const ** {
|
||||
/* Check if is a list */
|
||||
$1 = 1;
|
||||
if (PyList_Check($input)) {
|
||||
int size = PyList_Size($input);
|
||||
int i = 0;
|
||||
for (i = 0; i < size; i++) {
|
||||
PyObject *o = PyList_GetItem($input,i);
|
||||
if (!PyString_Check(o)) { $1 = 0; }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$1 = ( ($input == Py_None) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(freearg) char const ** {
|
||||
free((char *) $1);
|
||||
}
|
||||
|
||||
%typemap(out) char const ** {
|
||||
int len;
|
||||
int i;
|
||||
len = 0;
|
||||
while ($1[len]) len++;
|
||||
$result = PyList_New(len);
|
||||
for (i = 0; i < len; i++) {
|
||||
PyList_SetItem($result, i, PyString_FromString($1[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/* Typemap definitions to allow SWIG to properly handle char buffer. */
|
||||
|
||||
// typemap for a char buffer
|
||||
|
|
Loading…
Reference in New Issue