[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