[pypy-commit] pypy more-rposix: os.getsid(), os.setsid()

amauryfa noreply at buildbot.pypy.org
Fri Nov 7 14:52:20 CET 2014


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: more-rposix
Changeset: r74365:9ffac25cc23f
Date: 2014-11-07 00:26 +0100
http://bitbucket.org/pypy/pypy/changeset/9ffac25cc23f/

Log:	os.getsid(), os.setsid()

diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -416,7 +416,7 @@
     return rffi.charp2str(result)
 
 
-#_______________________________________________________________
+#___________________________________________________________________
 
 UTIMBUFP = lltype.Ptr(UTIMBUF)
 c_utime = external('utime', [rffi.CCHARP, UTIMBUFP], rffi.INT)
@@ -591,3 +591,23 @@
             lltype.free(pexit,   flavor='raw')
             lltype.free(pcreate, flavor='raw')
 
+#___________________________________________________________________
+
+ at specialize.arg(0)
+def handle_posix_error(name, result):
+    if result < 0:
+        raise OSError(get_errno(), '%s failed' % name)
+    return intmask(result)
+
+c_setsid = external('setsid', [], rffi.PID_T)
+c_getsid = external('getsid', [rffi.PID_T], rffi.PID_T)
+
+ at register_replacement_for(getattr(os, 'setsid', None),
+                          sandboxed_name='ll_os.ll_os_setsid')
+def setsid():
+    return handle_posix_error('os_setsid', c_setsid())
+
+ at register_replacement_for(getattr(os, 'getsid', None),
+                          sandboxed_name='ll_os.ll_os_getsid')
+def getsid(pid):
+    return handle_posix_error('os_setsid', c_getsid(pid))
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
@@ -247,18 +247,6 @@
         return extdef([int], int, llimpl=c_func_llimpl,
                       export_name='ll_os.ll_os_' + name)
 
-    @registering_if(os, 'setsid')
-    def register_os_setsid(self):
-        os_setsid = self.llexternal('setsid', [], rffi.PID_T)
-        def setsid_llimpl():
-            result = rffi.cast(lltype.Signed, os_setsid())
-            if result == -1:
-                raise OSError(rposix.get_errno(), "os_setsid failed")
-            return result
-
-        return extdef([], int, export_name="ll_os.ll_os_setsid",
-                      llimpl=setsid_llimpl)
-
     @registering_if(os, 'chroot')
     def register_os_chroot(self):
         os_chroot = self.llexternal('chroot', [rffi.CCHARP], rffi.INT)
@@ -552,14 +540,6 @@
     def register_os_setregid(self):
         return self.extdef_for_os_function_accepting_2int('setregid')
 
-    @registering_if(os, 'getsid')
-    def register_os_getsid(self):
-        return self.extdef_for_os_function_int_to_int('getsid')
-
-    @registering_if(os, 'setsid')
-    def register_os_setsid(self):
-        return self.extdef_for_os_function_returning_int('setsid')
-
     @registering_if(os, 'getresuid')
     def register_os_getresuid(self):
         c_getresuid = self.llexternal('getresuid', [rffi.INTP] * 3, rffi.INT)


More information about the pypy-commit mailing list