Author: Antonio Cuni <[email protected]>
Branch: ffistruct
Changeset: r49001:aa53c87e4cdf
Date: 2011-11-09 10:00 +0100
http://bitbucket.org/pypy/pypy/changeset/aa53c87e4cdf/

Log:    make sure that we properly convert a sbyte >= 128 into a negative
        value when we set it. This requires to change the TYPE_MAP_INT in
        clibffi.py, which was wrong before (rffi.CHAR is unsigned, not
        signed)

diff --git a/pypy/module/_ffi/test/test_struct.py 
b/pypy/module/_ffi/test/test_struct.py
--- a/pypy/module/_ffi/test/test_struct.py
+++ b/pypy/module/_ffi/test/test_struct.py
@@ -130,10 +130,10 @@
             ]
         descr = _StructDescr('foo', fields)
         struct = descr.allocate()
-        struct.setfield('sbyte', 42)
+        struct.setfield('sbyte', 128)
         struct.setfield('sint', 43)
         struct.setfield('slong', 44)
-        assert struct.getfield('sbyte') == 42
+        assert struct.getfield('sbyte') == -128
         assert struct.getfield('sint') == 43
         assert struct.getfield('slong') == 44
 
diff --git a/pypy/rlib/clibffi.py b/pypy/rlib/clibffi.py
--- a/pypy/rlib/clibffi.py
+++ b/pypy/rlib/clibffi.py
@@ -212,7 +212,7 @@
 
 __int_type_map = [
     (rffi.UCHAR, ffi_type_uchar),
-    (rffi.CHAR, ffi_type_schar),
+    (rffi.SIGNEDCHAR, ffi_type_schar),
     (rffi.SHORT, ffi_type_sshort),
     (rffi.USHORT, ffi_type_ushort),
     (rffi.UINT, ffi_type_uint),
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to