[pypy-svn] r56357 - in pypy/dist/pypy/module/termios: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Mon Jul 7 18:44:59 CEST 2008
Author: cfbolz
Date: Mon Jul 7 18:44:57 2008
New Revision: 56357
Modified:
pypy/dist/pypy/module/termios/interp_termios.py
pypy/dist/pypy/module/termios/test/test_termios.py
Log:
Fix an RPython-ValueError in tcsetattr.
Modified: pypy/dist/pypy/module/termios/interp_termios.py
==============================================================================
--- pypy/dist/pypy/module/termios/interp_termios.py (original)
+++ pypy/dist/pypy/module/termios/interp_termios.py Mon Jul 7 18:44:57 2008
@@ -28,34 +28,31 @@
return OperationError(w_exception_class, w_exception)
def tcsetattr(space, fd, when, w_attributes):
+ from pypy.interpreter.baseobjspace import UnpackValueError
try:
- w_cc = space.getitem(w_attributes, space.wrap(-1))
- tup_w = space.getitem(w_attributes, space.newslice(
- space.wrap(0), space.wrap(-1), space.wrap(1)))
- w_iflag, w_oflag, w_cflag, w_lflag, w_ispeed, w_ospeed = \
- space.unpackiterable(tup_w)
- w_builtin = space.getbuiltinmodule('__builtin__')
- cc = []
- for w_c in space.unpackiterable(w_cc):
- if space.is_true(space.isinstance(w_c, space.w_int)):
- ch = space.call_function(space.getattr(w_builtin,
- space.wrap('chr')), w_c)
- cc.append(space.str_w(ch))
- else:
- cc.append(space.str_w(w_c))
- tup = (space.int_w(w_iflag), space.int_w(w_oflag),
- space.int_w(w_cflag), space.int_w(w_lflag),
- space.int_w(w_ispeed), space.int_w(w_ospeed), cc)
- try:
- rtermios.tcsetattr(fd, when, tup)
- except termios.error, e:
- e.errno = e.args[0]
- raise convert_error(space, e)
- except OperationError, e:
- if not e.match(space, space.w_TypeError):
- raise
- msg = "tcsetattr must be called with int, int and 7-arg tuple"
- raise OperationError(space.w_TypeError, space.wrap(str(msg)))
+ w_iflag, w_oflag, w_cflag, w_lflag, w_ispeed, w_ospeed, w_cc = \
+ space.unpackiterable(w_attributes, expected_length=7)
+ except UnpackValueError, e:
+ raise OperationError(
+ space.w_TypeError,
+ space.wrap("tcsetattr, arg 3: must be 7 element list"))
+ w_builtin = space.getbuiltinmodule('__builtin__')
+ cc = []
+ for w_c in space.unpackiterable(w_cc):
+ if space.is_true(space.isinstance(w_c, space.w_int)):
+ ch = space.call_function(space.getattr(w_builtin,
+ space.wrap('chr')), w_c)
+ cc.append(space.str_w(ch))
+ else:
+ cc.append(space.str_w(w_c))
+ tup = (space.int_w(w_iflag), space.int_w(w_oflag),
+ space.int_w(w_cflag), space.int_w(w_lflag),
+ space.int_w(w_ispeed), space.int_w(w_ospeed), cc)
+ try:
+ rtermios.tcsetattr(fd, when, tup)
+ except termios.error, e:
+ e.errno = e.args[0]
+ raise convert_error(space, e)
tcsetattr.unwrap_spec = [ObjSpace, int, int, W_Root]
def tcgetattr(space, fd):
Modified: pypy/dist/pypy/module/termios/test/test_termios.py
==============================================================================
--- pypy/dist/pypy/module/termios/test/test_termios.py (original)
+++ pypy/dist/pypy/module/termios/test/test_termios.py Mon Jul 7 18:44:57 2008
@@ -128,3 +128,6 @@
import termios
raises(termios.error, "termios.tcgetattr(334)")
+ def test_error_tcsetattr(self):
+ import termios
+ raises(TypeError, termios.tcsetattr, 0, 1, (1, 2))
More information about the Pypy-commit
mailing list