Commit b7f2846a by Christian Seiler Committed by Serge Hallyn

python: improve convert_tuple_to_char_pointer_array

convert_tuple_to_char_pointer_array now also accepts lists and not only tuples when converting to a C array. Other fixes: - some checking that it's actually a list/tuple before trying to convert - off-by-a-few-bytes allocation error (sizeof(char *)*n+1 vs. sizeof(char *)*(n+1)/calloc(...)) Signed-off-by: 's avatarChristian Seiler <christian@iwakd.de> Acked-by: 's avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
parent 626ad11b
......@@ -34,10 +34,18 @@ typedef struct {
char**
convert_tuple_to_char_pointer_array(PyObject *argv) {
int argc = PyTuple_GET_SIZE(argv);
int argc;
int i, j;
/* not a list or tuple */
if (!PyList_Check(argv) && !PyTuple_Check(argv)) {
PyErr_SetString(PyExc_TypeError, "Expected list or tuple.");
return NULL;
}
argc = PySequence_Fast_GET_SIZE(argv);
char **result = (char**) malloc(sizeof(char*)*argc + 1);
char **result = (char**) calloc(argc + 1, sizeof(char*));
if (result == NULL) {
PyErr_SetNone(PyExc_MemoryError);
......@@ -45,7 +53,7 @@ convert_tuple_to_char_pointer_array(PyObject *argv) {
}
for (i = 0; i < argc; i++) {
PyObject *pyobj = PyTuple_GET_ITEM(argv, i);
PyObject *pyobj = PySequence_Fast_GET_ITEM(argv, i);
assert(pyobj != NULL);
char *str = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment