[lxc-devel] [PATCH 6/8] python: improve convert_tuple_to_char_pointer_array
Christian Seiler
christian at iwakd.de
Tue Aug 13 21:56:18 UTC 2013
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 at iwakd.de>
---
src/python-lxc/lxc.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
index 18f2224..ec81bbf 100644
--- a/src/python-lxc/lxc.c
+++ b/src/python-lxc/lxc.c
@@ -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;
--
1.7.10.4
More information about the lxc-devel
mailing list