[pypy-svn] r45269 - in pypy/dist/pypy/rpython/module: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Jul 23 13:52:27 CEST 2007
Author: fijal
Date: Mon Jul 23 13:52:26 2007
New Revision: 45269
Modified:
pypy/dist/pypy/rpython/module/ll_os.py
pypy/dist/pypy/rpython/module/test/test_posix.py
Log:
Add os.uname. RPython level. segfaults ll2ctypes in some strange way,
I'm not sure I want to know
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 Mon Jul 23 13:52:26 2007
@@ -110,6 +110,34 @@
register_external(os.setsid, [], int, export_name="ll_os.ll_os_setsid",
llimpl=setsid_lltypeimpl)
+# ------------------------------- os.uname ------------------------------
+
+if hasattr(os, 'uname'):
+ UTSNAMEP = rffi.CStruct('utsname', ('sysname', rffi.CCHARP),
+ ('nodename', rffi.CCHARP),
+ ('release', rffi.CCHARP),
+ ('version', rffi.CCHARP),
+ ('machine', rffi.CCHARP),
+ ('stuff', rffi.CCHARP))
+
+ os_uname = rffi.llexternal('uname', [UTSNAMEP], rffi.INT,
+ includes=['sys/utsname.h'])
+
+ def uname_lltypeimpl():
+ l_utsbuf = lltype.malloc(UTSNAMEP.TO, flavor='raw')
+ result = os_uname(l_utsbuf)
+ if result == -1:
+ raise OSError(rffi.c_errno, "os_uname failed")
+ fields = [l_utsbuf.c_sysname, l_utsbuf.c_nodename,
+ l_utsbuf.c_release, l_utsbuf.c_version, l_utsbuf.c_machine]
+ l = [rffi.charp2str(i) for i in fields]
+ retval = (l[0], l[1], l[2], l[3], l[4])
+ lltype.free(l_utsbuf, flavor='raw')
+ return retval
+
+ register_external(os.uname, [], (str, str, str, str, str),
+ "ll_os.ll_uname", llimpl=uname_lltypeimpl)
+
# ------------------------------- os.open -------------------------------
if os.name == 'nt':
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 Mon Jul 23 13:52:26 2007
@@ -2,7 +2,7 @@
skipimporterror("ctypes")
from pypy.rpython.test.tool import BaseRtypingTest, LLRtypeMixin, OORtypeMixin
-from pypy.tool.udir import udir
+from pypy.tool.udir import udir
import os
exec 'import %s as posix' % os.name
@@ -105,7 +105,15 @@
del BaseTestPosix.test_ftruncate
class TestLLtype(BaseTestPosix, LLRtypeMixin):
- pass
+ # XXX segfaulting while run on top of llinterp
+ if hasattr(os, 'uname'):
+ def test_os_uname(self):
+ from pypy.translator.c.test.test_genc import compile
+ for num in range(5):
+ def fun():
+ return os.uname()[num]
+ fn = compile(fun, [])
+ assert fn() == os.uname()[num]
class TestOOtype(BaseTestPosix, OORtypeMixin):
pass
More information about the Pypy-commit
mailing list