Author: Amaury Forgeot d'Arc <[email protected]>
Branch: more-rposix
Changeset: r74381:868a31be4ea7
Date: 2014-11-07 17:18 +0100
http://bitbucket.org/pypy/pypy/changeset/868a31be4ea7/
Log: Port more functions.
diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -166,24 +166,16 @@
config = rffi_platform.configure(CConfig)
globals().update(config)
-def external(name, args, result, **kwds):
- return rffi.llexternal(name, args, result, compilation_info=eci, **kwds)
+def external(name, args, result, compilation_info=eci, **kwds):
+ return rffi.llexternal(name, args, result,
+ compilation_info=compilation_info, **kwds)
c_dup = external(UNDERSCORE_ON_WIN32 + 'dup', [rffi.INT], rffi.INT)
c_dup2 = external(UNDERSCORE_ON_WIN32 + 'dup2', [rffi.INT, rffi.INT], rffi.INT)
c_open = external(UNDERSCORE_ON_WIN32 + 'open',
[rffi.CCHARP, rffi.INT, rffi.MODE_T], rffi.INT)
-c_execv = external('execv', [rffi.CCHARP, rffi.CCHARPP], rffi.INT)
-c_execve = external('execve',
- [rffi.CCHARP, rffi.CCHARPP, rffi.CCHARPP], rffi.INT)
c_getlogin = external('getlogin', [], rffi.CCHARP, releasegil=False)
-# Win32 specific functions
-c_spawnv = external('spawnv',
- [rffi.INT, rffi.CCHARP, rffi.CCHARPP], rffi.INT)
-c_spawnve = external('spawnve',
- [rffi.INT, rffi.CCHARP, rffi.CCHARPP, rffi.CCHARP],
- rffi.INT)
# Win32 Unicode functions
c_wopen = external(UNDERSCORE_ON_WIN32 + 'wopen',
[rffi.CWCHARP, rffi.INT, rffi.MODE_T], rffi.INT)
@@ -360,6 +352,15 @@
fd = c_open(_as_bytes0(path), flags, mode)
return handle_posix_error('open', fd)
+c_execv = external('execv', [rffi.CCHARP, rffi.CCHARPP], rffi.INT)
+c_execve = external('execve',
+ [rffi.CCHARP, rffi.CCHARPP, rffi.CCHARPP], rffi.INT)
+c_spawnv = external('spawnv',
+ [rffi.INT, rffi.CCHARP, rffi.CCHARPP], rffi.INT)
+c_spawnve = external('spawnve',
+ [rffi.INT, rffi.CCHARP, rffi.CCHARPP, rffi.CCHARP],
+ rffi.INT)
+
@replace_os_function('execv')
def execv(path, args):
rstring.check_str0(path)
@@ -778,3 +779,61 @@
def setresgid(rgid, egid, sgid):
handle_posix_error('setresgid', c_setresgid(rgid, egid, sgid))
+#___________________________________________________________________
+
+c_chroot = external('chroot', [rffi.CCHARP], rffi.INT)
+
+@replace_os_function('chroot')
+def chroot(path):
+ handle_posix_error('chroot', os_chroot(_as_bytes0(path)))
+
+CHARARRAY1 = lltype.FixedSizeArray(lltype.Char, 1)
+class CConfig:
+ _compilation_info_ = ExternalCompilationInfo(
+ includes = ['sys/utsname.h']
+ )
+ UTSNAME = rffi_platform.Struct('struct utsname', [
+ ('sysname', CHARARRAY1),
+ ('nodename', CHARARRAY1),
+ ('release', CHARARRAY1),
+ ('version', CHARARRAY1),
+ ('machine', CHARARRAY1)])
+config = rffi_platform.configure(CConfig)
+UTSNAMEP = lltype.Ptr(config['UTSNAME'])
+
+c_uname = external('uname', [UTSNAMEP], rffi.INT,
+ compilation_info=CConfig._compilation_info_)
+
+@replace_os_function('uname')
+def uname():
+ l_utsbuf = lltype.malloc(UTSNAMEP.TO, flavor='raw')
+ try:
+ handle_posix_error('uname', c_uname(l_utsbuf))
+ return (
+ rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_sysname)),
+ rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_nodename)),
+ rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_release)),
+ rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_version)),
+ rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_machine)),
+ )
+ finally:
+ lltype.free(l_utsbuf, flavor='raw')
+
+c_makedev = external('makedev', [rffi.INT, rffi.INT], rffi.INT)
+c_major = external('major', [rffi.INT], rffi.INT)
+c_minor = external('minor', [rffi.INT], rffi.INT)
+
+@replace_os_function('makedev')
+def makedev(maj, min):
+ return c_makedev(maj, min)
+
+@replace_os_function('major')
+def major(dev):
+ return c_major(dev)
+
+@replace_os_function('minor')
+def minor(dev):
+ return c_minor(dev)
+
+#___________________________________________________________________
+
diff --git a/rpython/rtyper/module/ll_os.py b/rpython/rtyper/module/ll_os.py
--- a/rpython/rtyper/module/ll_os.py
+++ b/rpython/rtyper/module/ll_os.py
@@ -235,54 +235,6 @@
return extdef([int], int, llimpl=c_func_llimpl,
export_name='ll_os.ll_os_' + name)
- @registering_if(os, 'chroot')
- def register_os_chroot(self):
- os_chroot = self.llexternal('chroot', [rffi.CCHARP], rffi.INT)
- def chroot_llimpl(arg):
- result = os_chroot(arg)
- if result == -1:
- raise OSError(rposix.get_errno(), "os_chroot failed")
-
- return extdef([str0], None, export_name="ll_os.ll_os_chroot",
- llimpl=chroot_llimpl)
-
- @registering_if(os, 'uname')
- def register_os_uname(self):
- CHARARRAY = lltype.FixedSizeArray(lltype.Char, 1)
- class CConfig:
- _compilation_info_ = ExternalCompilationInfo(
- includes = ['sys/utsname.h']
- )
- UTSNAME = platform.Struct('struct utsname', [
- ('sysname', CHARARRAY),
- ('nodename', CHARARRAY),
- ('release', CHARARRAY),
- ('version', CHARARRAY),
- ('machine', CHARARRAY)])
- config = platform.configure(CConfig)
- UTSNAMEP = lltype.Ptr(config['UTSNAME'])
-
- os_uname = self.llexternal('uname', [UTSNAMEP], rffi.INT,
- compilation_info=CConfig._compilation_info_)
-
- def uname_llimpl():
- l_utsbuf = lltype.malloc(UTSNAMEP.TO, flavor='raw')
- result = os_uname(l_utsbuf)
- if result == -1:
- raise OSError(rposix.get_errno(), "os_uname failed")
- retval = (
- rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_sysname)),
- rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_nodename)),
- rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_release)),
- rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_version)),
- rffi.charp2str(rffi.cast(rffi.CCHARP, l_utsbuf.c_machine)),
- )
- lltype.free(l_utsbuf, flavor='raw')
- return retval
-
- return extdef([], (str, str, str, str, str),
- "ll_os.ll_uname", llimpl=uname_llimpl)
-
@registering_if(os, 'sysconf')
def register_os_sysconf(self):
c_sysconf = self.llexternal('sysconf', [rffi.INT], rffi.LONG)
@@ -369,30 +321,6 @@
return extdef([], (float, float, float),
"ll_os.ll_getloadavg", llimpl=getloadavg_llimpl)
- @registering_if(os, 'makedev')
- def register_os_makedev(self):
- c_makedev = self.llexternal('makedev', [rffi.INT, rffi.INT], rffi.INT)
- def makedev_llimpl(maj, min):
- return c_makedev(maj, min)
- return extdef([int, int], int,
- "ll_os.ll_makedev", llimpl=makedev_llimpl)
-
- @registering_if(os, 'major')
- def register_os_major(self):
- c_major = self.llexternal('major', [rffi.INT], rffi.INT)
- def major_llimpl(dev):
- return c_major(dev)
- return extdef([int], int,
- "ll_os.ll_major", llimpl=major_llimpl)
-
- @registering_if(os, 'minor')
- def register_os_minor(self):
- c_minor = self.llexternal('minor', [rffi.INT], rffi.INT)
- def minor_llimpl(dev):
- return c_minor(dev)
- return extdef([int], int,
- "ll_os.ll_minor", llimpl=minor_llimpl)
-
# ------------------------------- os.read -------------------------------
@registering(os.read)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit