[lxc-devel] [PATCH 5/5] python/attach: Add function that returns personality for architecture

Christian Seiler christian at iwakd.de
Sun Aug 18 22:52:44 UTC 2013


Adds the arch_to_personality function that looks up an architecture
and returns the corresponding personality. This may be used in
conjunction with the attach/attach_wait keyword argument.

Signed-off-by: Christian Seiler <christian at iwakd.de>
---
 src/python-lxc/lxc.c           |   32 ++++++++++++++++++++++++++++++++
 src/python-lxc/lxc/__init__.py |    8 ++++++++
 2 files changed, 40 insertions(+)

diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
index b2abf38..65be814 100644
--- a/src/python-lxc/lxc.c
+++ b/src/python-lxc/lxc.c
@@ -26,6 +26,7 @@
 #include <lxc/lxccontainer.h>
 #include <lxc/utils.h>
 #include <lxc/namespace.h>
+#include <lxc/confile.h>
 #include <stdio.h>
 #include <sys/wait.h>
 
@@ -887,6 +888,35 @@ LXC_attach_run_shell(PyObject *self, PyObject *arg)
 }
 
 static PyObject *
+LXC_arch_to_personality(PyObject *self, PyObject *arg)
+{
+    long rv = -1;
+    PyObject *pystr;
+    char *str;
+
+    if (!PyUnicode_Check(arg)) {
+        PyErr_SetString(PyExc_ValueError, "Expected a string");
+        return NULL;
+    }
+    
+    pystr = PyUnicode_AsUTF8String(arg);
+    if (!pystr)
+        return NULL;
+    
+    str = PyBytes_AsString(pystr);
+    if (!str)
+        goto out;
+    
+    rv = lxc_config_parse_arch(str);
+    if (rv == -1)
+        PyErr_SetString(PyExc_KeyError, "Failed to lookup architecture.");
+
+out:
+    Py_DECREF(pystr);
+    return rv == -1 ? NULL : PyLong_FromLong(rv);
+}
+
+static PyObject *
 LXC_attach_run_command(PyObject *self, PyObject *arg)
 {
     PyObject *args_obj = NULL;
@@ -1140,6 +1170,8 @@ static PyMethodDef LXC_methods[] = {
      "Starts up a shell when attaching, to use as the run parameter for attach or attach_wait"},
     {"attach_run_command", (PyCFunction)LXC_attach_run_command, METH_O,
      "Runs a command when attaching, to use as the run parameter for attach or attach_wait"},
+    {"arch_to_personality", (PyCFunction)LXC_arch_to_personality, METH_O,
+     "Returns the process personality of the corresponding architecture"},
     {"get_default_config_path", (PyCFunction)LXC_get_default_config_path, METH_NOARGS,
      "Returns the current LXC config path"},
     {"get_version", (PyCFunction)LXC_get_version, METH_NOARGS,
diff --git a/src/python-lxc/lxc/__init__.py b/src/python-lxc/lxc/__init__.py
index 95d33e5..67f22dc 100644
--- a/src/python-lxc/lxc/__init__.py
+++ b/src/python-lxc/lxc/__init__.py
@@ -450,6 +450,14 @@ def attach_run_shell():
     """
     return _lxc.attach_run_shell(None)
 
+def arch_to_personality(arch):
+    """
+        Determine the process personality corresponding to the architecture
+    """
+    if isinstance(arch, bytes):
+        arch = str(arch, 'utf-8')
+    return _lxc.arch_to_personality(arch)
+
 # Some constants for attach
 LXC_ATTACH_KEEP_ENV = _lxc.LXC_ATTACH_KEEP_ENV
 LXC_ATTACH_CLEAR_ENV = _lxc.LXC_ATTACH_CLEAR_ENV
-- 
1.7.10.4





More information about the lxc-devel mailing list