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

Reply via email to