msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-16 12:45+0200\n"
+"POT-Creation-Date: 2011-10-16 14:09+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
# #
###############################################################################
-import ctypes
import fcntl
import os
import select
import subprocess
import time
-from errors import *
+from _pakfire import PERSONALITY_LINUX, PERSONALITY_LINUX32
-_libc = ctypes.cdll.LoadLibrary(None)
-_libc.personality.argtypes = [ctypes.c_ulong]
-_libc.personality.restype = ctypes.c_int
+import pakfire.util as util
+from errors import *
def logOutput(fds, logger, returnOutput=1, start=0, timeout=0):
output=""
Return personality value if supported.
Otherwise return None.
"""
- # taken from sys/personality.h
personality_defs = {
- "linux64": 0x0000,
- "linux32": 0x0008,
+ "linux64": PERSONALITY_LINUX,
+ "linux32": PERSONALITY_LINUX32,
}
try:
# Set new personality if we got one.
if self.personality:
- res = _libc.personality(self.personality)
- if res == -1:
- raise OSError, "Could not set personality"
+ util.personality(self.personality)
# Change into new root.
if self.chrootPath:
from i18n import _
# Import binary version of version_compare and capability functions
-from _pakfire import version_compare, get_capabilities, set_capabilities
+from _pakfire import version_compare, get_capabilities, set_capabilities, personality
def cli_is_interactive():
"""
#include <Python.h>
+#include <sys/personality.h>
+
#include "capabilities.h"
#include "config.h"
#include "pool.h"
{"version_compare", (PyCFunction)version_compare, METH_VARARGS, NULL},
{"get_capabilities", (PyCFunction)get_capabilities, METH_VARARGS, NULL},
{"set_capabilities", (PyCFunction)set_capabilities, METH_VARARGS, NULL},
+ {"personality", (PyCFunction)_personality, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
};
// Add constants
d = PyModule_GetDict(m);
+ // Personalities
+ PyDict_SetItemString(d, "PERSONALITY_LINUX", Py_BuildValue("i", PER_LINUX));
+ PyDict_SetItemString(d, "PERSONALITY_LINUX32", Py_BuildValue("i", PER_LINUX32));
+
// Add constants for relations
PyDict_SetItemString(d, "REL_EQ", Py_BuildValue("i", REL_EQ));
PyDict_SetItemString(d, "REL_LT", Py_BuildValue("i", REL_LT));
#include <Python.h>
+#include <sys/personality.h>
+
#include "util.h"
+PyObject *_personality(PyObject *self, PyObject *args) {
+ unsigned long persona;
+ int ret = 0;
+
+ if (!PyArg_ParseTuple(args, "l", &persona)) {
+ /* XXX raise exception */
+ return NULL;
+ }
+
+ /* Change personality here. */
+ ret = personality(persona);
+
+ if (ret < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "Could not set personality.");
+ return NULL;
+ }
+
+ return Py_BuildValue("i", ret);
+}
+
PyObject *version_compare(PyObject *self, PyObject *args) {
Pool *pool;
const char *evr1, *evr2;
#include <solv/evr.h>
+extern PyObject *_personality(PyObject *self, PyObject *args);
extern PyObject *version_compare(PyObject *self, PyObject *args);
#endif