mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 12:37:35 +00:00
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: Christian Seiler <christian@iwakd.de> Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
parent
626ad11bfe
commit
b7f2846aab
@ -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;
|
||||
|
||||
char **result = (char**) malloc(sizeof(char*)*argc + 1);
|
||||
/* 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**) 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;
|
||||
|
Loading…
Reference in New Issue
Block a user