[pypy-svn] r48729 - in pypy/dist/pypy/rpython/module: . test
fijal at codespeak.net
fijal at codespeak.net
Fri Nov 16 19:21:12 CET 2007
Author: fijal
Date: Fri Nov 16 19:21:11 2007
New Revision: 48729
Modified:
pypy/dist/pypy/rpython/module/ll_os.py
pypy/dist/pypy/rpython/module/test/test_posix.py
Log:
Add os.setuid/setgid
Modified: pypy/dist/pypy/rpython/module/ll_os.py
==============================================================================
--- pypy/dist/pypy/rpython/module/ll_os.py (original)
+++ pypy/dist/pypy/rpython/module/ll_os.py Fri Nov 16 19:21:11 2007
@@ -80,6 +80,18 @@
return extdef([], int, llimpl=c_func_llimpl,
export_name='ll_os.ll_os_' + name)
+ def extdef_for_function_int_to_int(self, name, **kwds):
+ c_func = self.llexternal(name, [rffi.INT], rffi.INT, **kwds)
+ def c_func_llimpl(arg):
+ res = rffi.cast(rffi.LONG, c_func(arg))
+ if res == -1:
+ raise OSError(rffi.get_errno(), "%s failed" % name)
+
+ c_func_llimpl.func_name = name + '_llimpl'
+
+ return extdef([int], None, llimpl=c_func_llimpl,
+ export_name='ll_os.ll_os_' + name)
+
@registering_if(os, 'execv')
def register_os_execv(self):
os_execv = self.llexternal('execv', [rffi.CCHARP, rffi.CCHARPP],
@@ -344,6 +356,14 @@
def register_os_geteuid(self):
return self.extdef_for_os_function_returning_int('geteuid')
+ @registering_if(os, 'setuid')
+ def register_os_setuid(self):
+ return self.extdef_for_function_int_to_int('setuid')
+
+ @registering_if(os, 'setgid')
+ def register_os_setgid(self):
+ return self.extdef_for_function_int_to_int('setgid')
+
@registering_if(os, 'getpid')
def register_os_getpid(self):
return self.extdef_for_os_function_returning_int('getpid')
Modified: pypy/dist/pypy/rpython/module/test/test_posix.py
==============================================================================
--- pypy/dist/pypy/rpython/module/test/test_posix.py (original)
+++ pypy/dist/pypy/rpython/module/test/test_posix.py Fri Nov 16 19:21:11 2007
@@ -134,6 +134,13 @@
res = self.interpret(fun, [value])
assert res == fun(value)
+ if hasattr(os, 'setuid'):
+ def test_os_setuid(self):
+ def f():
+ os.setuid(os.getuid())
+ return os.getuid()
+ assert self.interpret(f, []) == f()
+
class TestLLtype(BaseTestPosix, LLRtypeMixin):
pass
More information about the Pypy-commit
mailing list