[pypy-commit] pypy more-rposix: Some simplifications

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


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

Log:	Some simplifications

diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -326,34 +326,37 @@
 # They usually check the return value and raise an (RPython) OSError
 # with errno.
 
- at register_replacement_for(os.dup, sandboxed_name='ll_os.ll_os_dup')
+def replace_os_function(name):
+    return register_replacement_for(
+        getattr(os, name, None),
+        sandboxed_name='ll_os.ll_os_%s' % name)
+
+ at specialize.arg(0)
+def handle_posix_error(name, result):
+    if result < 0:
+        raise OSError(get_errno(), '%s failed' % name)
+    return intmask(result)
+
+ at replace_os_function('dup')
 def dup(fd):
     validate_fd(fd)
-    newfd = c_dup(fd)
-    if newfd < 0:
-        raise OSError(get_errno(), "dup failed")
-    return intmask(newfd)
+    return handle_posix_error('dup', c_dup(fd))
 
- at register_replacement_for(os.dup2, sandboxed_name='ll_os.ll_os_dup2')
+ at replace_os_function('dup2')
 def dup2(fd, newfd):
     validate_fd(fd)
-    error = c_dup2(fd, newfd)
-    if error < 0:
-        raise OSError(get_errno(), "dup2 failed")
+    handle_posix_error('dup2', c_dup2(fd, newfd))
 
- at register_replacement_for(os.open, sandboxed_name='ll_os.ll_os_open')
+ at replace_os_function('open')
 @specialize.argtype(0)
 def open(path, flags, mode):
     if _prefer_unicode(path):
         fd = c_wopen(_as_unicode0(path), flags, mode)
     else:
         fd = c_open(_as_bytes0(path), flags, mode)
-    if fd < 0:
-        raise OSError(get_errno(), "open failed")
-    return intmask(fd)
+    return handle_posix_error('open', fd)
         
- at register_replacement_for(getattr(os, 'execv', None),
-                          sandboxed_name='ll_os.ll_os_execv')
+ at replace_os_function('execv')
 def execv(path, args):
     rstring.check_str0(path)
     # This list conversion already takes care of NUL bytes.
@@ -362,8 +365,7 @@
     rffi.free_charpp(l_args)
     raise OSError(get_errno(), "execv failed")
 
- at register_replacement_for(getattr(os, 'execve', None),
-                          sandboxed_name='ll_os.ll_os_execve')
+ at replace_os_function('execve')
 def execve(path, args, env):
     envstrs = []
     for item in env.iteritems():
@@ -380,19 +382,15 @@
     rffi.free_charpp(l_args)
     raise OSError(get_errno(), "execve failed")
 
- at register_replacement_for(getattr(os, 'spawnv', None),
-                          sandboxed_name='ll_os.ll_os_spawnv')
+ at replace_os_function('spawnv')
 def spawnv(mode, path, args):
     rstring.check_str0(path)
     l_args = rffi.ll_liststr2charpp(args)
     childpid = c_spawnv(mode, path, l_args)
     rffi.free_charpp(l_args)
-    if childpid < 0:
-        raise OSError(get_errno(), "os_spawnv failed")
-    return intmask(childpid)
+    return handle_posix_error('spawnv', childpid)
 
- at register_replacement_for(getattr(os, 'spawnve', None),
-                          sandboxed_name='ll_os.ll_os_spawnve')
+ at replace_os_function('spawnve')
 def spawnve(mode, path, args, env):
     envstrs = []
     for item in env.iteritems():
@@ -403,12 +401,9 @@
     childpid = c_spawnve(mode, path, l_args, l_env)
     rffi.free_charpp(l_env)
     rffi.free_charpp(l_args)
-    if childpid == -1:
-        raise OSError(get_errno(), "os_spawnve failed")
-    return intmask(childpid)
+    return handle_posix_error('spawnve', childpid)
 
- at register_replacement_for(getattr(os, 'getlogin', None),
-                          sandboxed_name='ll_os.ll_os_getlogin')
+ at replace_os_function('getlogin')
 def getlogin():
     result = c_getlogin()
     if not result:
@@ -456,8 +451,7 @@
         calling_conv='win')
 
 
- at register_replacement_for(getattr(os, 'utime', None),
-                          sandboxed_name='ll_os.ll_os_utime')
+ at replace_os_function('utime')
 @specialize.argtype(0, 1)
 def utime(path, times):
     if not _WIN32:
@@ -483,8 +477,7 @@
                 l_utimbuf.c_modtime = rffi.r_time_t(modtime)
                 error = c_utime(path, l_utimbuf)
                 lltype.free(l_utimbuf, flavor='raw')
-        if error < 0:
-            raise OSError(get_errno(), "os_utime failed")
+        handle_posix_error('utime', error)
     else:  # _WIN32 case
         from rpython.rlib.rwin32file import make_win32_traits
         if _prefer_unicode(path):
@@ -547,7 +540,7 @@
             lltype.Ptr(rwin32.FILETIME), lltype.Ptr(rwin32.FILETIME)],
         rwin32.BOOL, calling_conv='win')
 
- at register_replacement_for(os.times, sandboxed_name='ll_os.ll_times')
+ at replace_os_function('times')
 def times():
     if not _WIN32:
         l_tmsbuf = lltype.malloc(TMSP.TO, flavor='raw')
@@ -593,21 +586,13 @@
 
 #___________________________________________________________________
 
- 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')
+ at replace_os_function('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')
+ at replace_os_function('getsid')
 def getsid(pid):
     return handle_posix_error('os_setsid', c_getsid(pid))


More information about the pypy-commit mailing list