/* Module functions */ 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 signed long get_personality(const char *name, const char *lxcpath) { char *p = lxc_cmd_get_config_item(name, "lxc.arch", lxcpath); signed long ret; if (!p) return -1; ret = lxc_config_parse_arch(p); free(p); return ret; }
static int my_parser(struct lxc_arguments* args, int c, char* arg) { int ret; switch (c) { case 'e': ret = lxc_fill_elevated_privileges(arg, &elevated_privileges); if (ret) return -1; break; case 'R': remount_sys_proc = 1; break; case 'a': new_personality = lxc_config_parse_arch(arg); if (new_personality < 0) { lxc_error(args, "invalid architecture specified: %s", arg); return -1; } break; case 's': namespace_flags = 0; ret = lxc_fill_namespace_flags(arg, &namespace_flags); if (ret) return -1; /* -s implies -e */ lxc_fill_elevated_privileges(NULL, &elevated_privileges); break; case 500: /* clear-env */ env_policy = LXC_ATTACH_CLEAR_ENV; break; case 501: /* keep-env */ env_policy = LXC_ATTACH_KEEP_ENV; break; case 502: /* keep-var */ ret = add_to_simple_array(&extra_keep, &extra_keep_size, arg); if (ret < 0) { lxc_error(args, "memory allocation error"); return -1; } break; case 'v': ret = add_to_simple_array(&extra_env, &extra_env_size, arg); if (ret < 0) { lxc_error(args, "memory allocation error"); return -1; } break; } return 0; }