[lxc-devel] [PATCH] python3: Use FSConverter for all paths

Serge Hallyn serge.hallyn at ubuntu.com
Fri Nov 29 15:45:35 UTC 2013


Quoting Stéphane Graber (stgraber at ubuntu.com):
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

After a brief look at http://docs.python.org/3.1/c-api/unicode.html I
suppose it looks good...

Acked-by: Serge E. Hallyn <serge.hallyn 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
> 
> 
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT 
> organizations don't have a clear picture of how application performance 
> affects their revenue. With AppDynamics, you get 100% visibility into your 
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel




More information about the lxc-devel mailing list