[lxc-devel] [PATCH] python3: Use FSConverter for all paths
Stéphane Graber
stgraber at ubuntu.com
Thu Nov 28 20:10:35 UTC 2013
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
src/python-lxc/lxc.c | 69 +++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 60 insertions(+), 9 deletions(-)
diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
index 5a20ff4..b4f1da3 100644
--- a/src/python-lxc/lxc.c
+++ b/src/python-lxc/lxc.c
@@ -510,16 +510,33 @@ Container_add_device_node(Container *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"src_path", "dest_path", NULL};
char *src_path = NULL;
char *dst_path = NULL;
+ PyObject *py_src_path = NULL;
+ PyObject *py_dst_path = NULL;
- if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|s", kwlist,
- &src_path, &dst_path))
+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "O&|O&", kwlist,
+ PyUnicode_FSConverter, &py_src_path,
+ PyUnicode_FSConverter, &py_dst_path))
return NULL;
+ if (py_src_path != NULL) {
+ src_path = PyBytes_AS_STRING(py_src_path);
+ assert(src_path != NULL);
+ }
+
+ if (py_dst_path != NULL) {
+ dst_path = PyBytes_AS_STRING(py_dst_path);
+ assert(dst_path != NULL);
+ }
+
if (self->container->add_device_node(self->container, src_path,
dst_path)) {
+ Py_XDECREF(py_src_path);
+ Py_XDECREF(py_dst_path);
Py_RETURN_TRUE;
}
+ Py_XDECREF(py_src_path);
+ Py_XDECREF(py_dst_path);
Py_RETURN_FALSE;
}
@@ -611,14 +628,16 @@ Container_clone(Container *self, PyObject *args, PyObject *kwds)
char **hookargs = NULL;
PyObject *py_hookargs = NULL;
+ PyObject *py_config_path = NULL;
struct lxc_container *new_container = NULL;
int i = 0;
static char *kwlist[] = {"newname", "config_path", "flags", "bdevtype",
"bdevdata", "newsize", "hookargs", NULL};
- if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|sisskO", kwlist,
- &newname, &config_path, &flags,
- &bdevtype, &bdevdata, &newsize,
+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|O&isskO", kwlist,
+ &newname,
+ PyUnicode_FSConverter, &py_config_path,
+ &flags, &bdevtype, &bdevdata, &newsize,
&py_hookargs))
return NULL;
@@ -635,10 +654,17 @@ Container_clone(Container *self, PyObject *args, PyObject *kwds)
}
}
+ if (py_config_path != NULL) {
+ config_path = PyBytes_AS_STRING(py_config_path);
+ assert(config_path != NULL);
+ }
+
new_container = self->container->clone(self->container, newname,
config_path, flags, bdevtype,
bdevdata, newsize, hookargs);
+ Py_XDECREF(py_config_path);
+
if (hookargs) {
for (i = 0; i < PyTuple_GET_SIZE(py_hookargs); i++)
free(hookargs[i]);
@@ -1010,16 +1036,33 @@ Container_remove_device_node(Container *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"src_path", "dest_path", NULL};
char *src_path = NULL;
char *dst_path = NULL;
+ PyObject *py_src_path = NULL;
+ PyObject *py_dst_path = NULL;
- if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|s", kwlist,
- &src_path, &dst_path))
+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "O&|O&", kwlist,
+ PyUnicode_FSConverter, &py_src_path,
+ PyUnicode_FSConverter, &py_dst_path))
return NULL;
+ if (py_src_path != NULL) {
+ src_path = PyBytes_AS_STRING(py_src_path);
+ assert(src_path != NULL);
+ }
+
+ if (py_dst_path != NULL) {
+ dst_path = PyBytes_AS_STRING(py_dst_path);
+ assert(dst_path != NULL);
+ }
+
if (self->container->remove_device_node(self->container, src_path,
dst_path)) {
+ Py_XDECREF(py_src_path);
+ Py_XDECREF(py_dst_path);
Py_RETURN_TRUE;
}
+ Py_XDECREF(py_src_path);
+ Py_XDECREF(py_dst_path);
Py_RETURN_FALSE;
}
@@ -1126,13 +1169,21 @@ Container_snapshot(Container *self, PyObject *args, PyObject *kwds)
int retval = 0;
int ret = 0;
char newname[20];
+ PyObject *py_comment_path;
- if (! PyArg_ParseTupleAndKeywords(args, kwds, "|s", kwlist,
- &comment_path))
+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "|O&", kwlist,
+ PyUnicode_FSConverter, &py_comment_path))
return NULL;
+ if (py_comment_path != NULL) {
+ comment_path = PyBytes_AS_STRING(py_comment_path);
+ assert(comment_path != NULL);
+ }
+
retval = self->container->snapshot(self->container, comment_path);
+ Py_XDECREF(py_comment_path);
+
if (retval < 0) {
Py_RETURN_FALSE;
}
--
1.8.4.4
More information about the lxc-devel
mailing list