[pypy-svn] r61015 - in pypy/trunk/pypy: module/posix rpython/module

fijal at codespeak.net fijal at codespeak.net
Thu Jan 15 18:46:38 CET 2009


Author: fijal
Date: Thu Jan 15 18:46:37 2009
New Revision: 61015

Modified:
   pypy/trunk/pypy/module/posix/__init__.py
   pypy/trunk/pypy/module/posix/interp_posix.py
   pypy/trunk/pypy/rpython/module/ll_os.py
Log:
A couple of missing os.*


Modified: pypy/trunk/pypy/module/posix/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/posix/__init__.py	(original)
+++ pypy/trunk/pypy/module/posix/__init__.py	Thu Jan 15 18:46:37 2009
@@ -86,23 +86,12 @@
         interpleveldefs['sysconf_names'] = 'space.wrap(os.sysconf_names)'
     if hasattr(os, 'ttyname'):
         interpleveldefs['ttyname'] = 'interp_posix.ttyname'
-    if hasattr(os, 'setsid'):
-        interpleveldefs['setsid'] = 'interp_posix.setsid'
-    if hasattr(os, 'getuid'):
-        interpleveldefs['getuid'] = 'interp_posix.getuid'
-        interpleveldefs['geteuid'] = 'interp_posix.geteuid'
-    if hasattr(os, 'getgid'):
-        interpleveldefs['getgid'] = 'interp_posix.getgid'
-    if hasattr(os, 'getegid'):
-        interpleveldefs['getegid'] = 'interp_posix.getegid'
-    if hasattr(os, 'setuid'):
-        interpleveldefs['setuid'] = 'interp_posix.setuid'
-    if hasattr(os, 'seteuid'):
-        interpleveldefs['seteuid'] = 'interp_posix.seteuid'
-    if hasattr(os, 'setgid'):
-        interpleveldefs['setgid'] = 'interp_posix.setgid'
-    if hasattr(os, 'setegid'):
-        interpleveldefs['setegid'] = 'interp_posix.setegid'
+
+    for name in ['setsid', 'getuid', 'geteuid', 'getgid', 'getegid', 'setuid',
+                 'seteuid', 'setgid', 'setegid', 'getpgrp', 'setpgrp',
+                 'getppid', 'getpgid', 'setpgid', 'setreuid', 'setregid']:
+        if hasattr(os, name):
+            interpleveldefs[name] = 'interp_posix.%s' % (name,)
     # not visible via os, inconsistency in nt:
     if hasattr(posix, '_getfullpathname'):
         interpleveldefs['_getfullpathname'] = 'interp_posix._getfullpathname'

Modified: pypy/trunk/pypy/module/posix/interp_posix.py
==============================================================================
--- pypy/trunk/pypy/module/posix/interp_posix.py	(original)
+++ pypy/trunk/pypy/module/posix/interp_posix.py	Thu Jan 15 18:46:37 2009
@@ -651,6 +651,78 @@
     return space.wrap(os.geteuid())
 geteuid.unwrap_spec = [ObjSpace]
 
+def getpgrp(space):
+    """ getpgrp() -> pgrp
+
+    Return the current process group id.
+    """
+    return space.wrap(os.getpgrp())
+getpgrp.unwrap_spec = [ObjSpace]
+
+def setpgrp(space):
+    """ setpgrp()
+
+    Make this process a session leader.
+    """
+    try:
+        os.setpgrp()
+    except OSError, e:
+        raise wrap_oserror(space, e)
+    return space.w_None        
+setpgrp.unwrap_spec = [ObjSpace]
+
+def getppid(space):
+    """ getppid() -> ppid
+
+    Return the parent's process id.
+    """
+    return space.wrap(os.getppid())
+getppid.unwrap_spec = [ObjSpace]
+
+def getpgid(space, pid):
+    """ getpgid(pid) -> pgid
+
+    Call the system call getpgid().
+    """
+    return space.wrap(os.getpgid(pid))
+getpgid.unwrap_spec = [ObjSpace, int]
+
+def setpgid(space, pid, pgrp):
+    """ setpgid(pid, pgrp)
+
+    Call the system call setpgid().
+    """
+    try:
+        os.setpgid(pid, pgrp)
+    except OSError, e:
+        raise wrap_oserror(space, e)
+    return space.w_None                
+setpgid.unwrap_spec = [ObjSpace, int, int]
+
+def setreuid(space, ruid, euid):
+    """ setreuid(ruid, euid)
+
+    Set the current process's real and effective user ids.
+    """
+    try:
+        os.setreuid(ruid, euid)
+    except OSError, e:
+        raise wrap_oserror(space, e)
+    return space.w_None                
+setreuid.unwrap_spec = [ObjSpace, int, int]
+
+def setregid(space, rgid, egid):
+    """ setregid(rgid, egid)
+
+    Set the current process's real and effective group ids.
+    """
+    try:
+        os.setregid(rgid, egid)
+    except OSError, e:
+        raise wrap_oserror(space, e)
+    return space.w_None                
+setregid.unwrap_spec = [ObjSpace, int, int]
+
 def declare_new_w_star(name):
     if name in RegisterOs.w_star_returning_int:
         def WSTAR(space, status):

Modified: pypy/trunk/pypy/rpython/module/ll_os.py
==============================================================================
--- pypy/trunk/pypy/rpython/module/ll_os.py	(original)
+++ pypy/trunk/pypy/rpython/module/ll_os.py	Thu Jan 15 18:46:37 2009
@@ -119,7 +119,7 @@
         return extdef([], int, llimpl=c_func_llimpl,
                       export_name='ll_os.ll_os_' + name)
 
-    def extdef_for_function_int_to_int(self, name, **kwds):
+    def extdef_for_function_accepting_int(self, name, **kwds):
         c_func = self.llexternal(name, [rffi.INT], rffi.INT, **kwds)
         def c_func_llimpl(arg):
             res = rffi.cast(rffi.LONG, c_func(arg))
@@ -131,6 +131,31 @@
         return extdef([int], None, llimpl=c_func_llimpl,
                       export_name='ll_os.ll_os_' + name)
 
+    def extdef_for_function_accepting_2int(self, name, **kwds):
+        c_func = self.llexternal(name, [rffi.INT, rffi.INT], rffi.INT, **kwds)
+        def c_func_llimpl(arg, arg2):
+            res = rffi.cast(rffi.LONG, c_func(arg, arg2))
+            if res == -1:
+                raise OSError(rposix.get_errno(), "%s failed" % name)
+        
+        c_func_llimpl.func_name = name + '_llimpl'
+
+        return extdef([int, int], None, llimpl=c_func_llimpl,
+                      export_name='ll_os.ll_os_' + name)        
+
+    def extdef_for_function_int_to_int(self, name, **kwds):
+        c_func = self.llexternal(name, [rffi.INT], rffi.INT, **kwds)
+        def c_func_llimpl(arg):
+            res = rffi.cast(rffi.LONG, c_func(arg))
+            if res == -1:
+                raise OSError(rposix.get_errno(), "%s failed" % name)
+            return res
+        
+        c_func_llimpl.func_name = name + '_llimpl'
+
+        return extdef([int], int, llimpl=c_func_llimpl,
+                      export_name='ll_os.ll_os_' + name)
+
     @registering_if(os, 'execv')
     def register_os_execv(self):
         eci = self.gcc_profiling_bug_workaround(
@@ -465,19 +490,19 @@
 
     @registering_if(os, 'setuid')
     def register_os_setuid(self):
-        return self.extdef_for_function_int_to_int('setuid')
+        return self.extdef_for_function_accepting_int('setuid')
 
     @registering_if(os, 'seteuid')
     def register_os_seteuid(self):
-        return self.extdef_for_function_int_to_int('seteuid')
+        return self.extdef_for_function_accepting_int('seteuid')
 
     @registering_if(os, 'setgid')
     def register_os_setgid(self):
-        return self.extdef_for_function_int_to_int('setgid')
+        return self.extdef_for_function_accepting_int('setgid')
 
     @registering_if(os, 'setegid')
     def register_os_setegid(self):
-        return self.extdef_for_function_int_to_int('setegid')
+        return self.extdef_for_function_accepting_int('setegid')
 
     @registering_if(os, 'getpid')
     def register_os_getpid(self):
@@ -490,7 +515,34 @@
     @registering_if(os, 'getegid')
     def register_os_getegid(self):
         return self.extdef_for_os_function_returning_int('getegid')
-    
+
+    @registering_if(os, 'getpgrp')
+    def register_os_getpgrp(self):
+        return self.extdef_for_os_function_returning_int('getpgrp')
+
+    @registering_if(os, 'setpgrp')
+    def register_os_setpgrp(self):
+        return self.extdef_for_os_function_returning_int('setpgrp')
+
+    @registering_if(os, 'getppid')
+    def register_os_getppid(self):
+        return self.extdef_for_os_function_returning_int('getppid')
+
+    @registering_if(os, 'getpgid')
+    def register_os_getpgid(self):
+        return self.extdef_for_function_int_to_int('getpgid')
+
+    @registering_if(os, 'setpgid')
+    def register_os_setpgid(self):
+        return self.extdef_for_function_accepting_2int('setpgid')
+
+    @registering_if(os, 'setreuid')
+    def register_os_setreuid(self):
+        return self.extdef_for_function_accepting_2int('setreuid')
+
+    @registering_if(os, 'setregid')
+    def register_os_setregid(self):
+        return self.extdef_for_function_accepting_2int('setregid')
 
     @registering(os.open)
     def register_os_open(self):



More information about the Pypy-commit mailing list