[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